split が PHP 5.3.0 で非推奨となっていた件

3 min read

秘伝のソースとかを受け継いでいっていたりしていたので全く気づかなかった。

非推奨

PHP: split - Manualによると

警告 この関数は PHP 5.3.0 で 非推奨となりました。 この機能を使用しないことを強く推奨します。

強く推奨されている。

注意: PHP 5.3.0 以降、 regex 拡張モジュールは非推奨となりました。かわりに PCRE 拡張モジュール を使うことが推奨されています。 この関数をコールすると E_DEPRECATED が発生します。 PCRE への変換についてのヘルプは 相違点の一覧 を参照ください。

5.3.0 時点で非推奨になっている。

Java や JavaScript なんかでも「文字列を分割する」といえば split なので癖で使ってしまいそうである。

代替方法

リファレンスにはヒントとして、以下のように書かれてある。

ヒント split() は PHP 5.3.0 以降で非推奨になりました。この関数のかわりに preg_split() を使うことを推奨します。 正規表現の威力が必要ないのであれば、explode() を使用するほうがより高速です。これは正規表現エンジンの オーバーヘッドを受けません。

何でもできる split は無くなってしまうので、用途に応じて preg_split()と explode()を使い分けてね。

条件が同じなら返ってくる結果は同じなので移行は面倒じゃなさそう。

preg_split (正規表現を使う場合)


$str = "a-b-c-d";
var_dump( preg_split('/-/', $str) );

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
}

explode (正規表現を使わない場合)

「(正規表現が不必要であれば)explode() を使用するほうがより高速です」との事。


$str = "a-b-c-d";
var_dump( explode('-', $str) );

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
}

splitとexplodeの違い

ちなみに
split( 区切り文字,   文字列, [配列の数] )  // 正規表現OK
explode( 区切り文字, 文字列, [配列の数] )  // 正規表現NG

区切り文字(第 1 引数)に正規表現を使えるか否かの違い。それ以外は同じ引数。

引用元