Union Types v2の名でPHPにUnion Typesの導入が可決されそうです。日本時間の2019/10/28 18:00時点で46対3で可決有利。おそらくそのまま受理されるでしょう。
PHP: rfc:union_types_v2
php-rfcs/0000-union-types-v2.md at union-types · nikic/php-rfcs
Union Typesは大雑把に言えば型の和を示す型です。Union Typesが実装された時、次のように全く異なる型のorを指定できます。例では返り値の型ですが引数など今まで型を使えていたどの部分でも使えます。
public function getNumber() :int|float { // 返り値はint型かfloat型である、という宣言 return $this->number; }
TypeScriptを触るとよく見る記法です。TypeScript以外にも型を定義できる言語ではよく見るらしいです。PHPは暗黙の型変換もあり組み込み関数も何かと寛容なものが多いので細かく縛れるUnion Typesは役立ってくれるでしょう。
// PHP: str_replace - Manualから引用 // @see https://www.php.net/manual/ja/function.str-replace.php // str_replaceの第一引数はarray, stringを使える。 <?php // <body text='black'> となります $bodytag = str_replace("%body%", "black", "<body text='%body%'>"); // Hll Wrld f PHP となります $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace($vowels, "", "Hello World of PHP"); // You should eat pizza, beer, and ice cream every day となります $phrase = "You should eat fruits, vegetables, and fiber every day."; $healthy = array("fruits", "vegetables", "fiber"); $yummy = array("pizza", "beer", "ice cream"); $newphrase = str_replace($healthy, $yummy, $phrase); // 2 となります $str = str_replace("ll", "", "good golly miss molly!", $count); echo $count; ?>