浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

 文字列の結合と分割はよく行われる操作であり、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

  • この記事いいね! (1)