【PHP】関数implodeの引数が類を見ないくらい自由だった話

  • 2019年7月24日
  • PHP

 文字列の結合と分割はよく行われる操作であり、PHPにもそのための組み込み関数implode, explodeが用意されています。
PHP: implode – Manual
PHP: explode – Manual
 それぞれドキュメント上では次の様な呼び出し方が説明されています。

implode ( string $glue , array $pieces ) : string
implode ( array $pieces ) : string
explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array

 第一引数に区切り文字、第二引数に対象が入るのだな、と理解できます。しかしこのimplode実は次の様にも動きます。

 第二引数に対象、第一引数に区切り文字でも動きます。暗黙の内によしなにしてくれるのはPHPあるあるですが流石にこれは凄まじいです。ちなみにexplodeはダメです。公式で次の様に注意喚起されています。

注意:

歴史的理由により、implode()
はいずれのパラメータ順も受け入れることができますが、
explode() はそうできません。
string 引数の前に必ず
delimiter 引数がくるように確認する必要があります。

あまりにも自由すぎたのかPHP7.4から非推奨になります。RIP.
PHP: rfc:deprecations_php_7_4#implode_parameter_order_mix

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG