PHP5.2.3のタイプヒンティング
手元のVMware上のCentOS4.4に、PHP5.1.6がインストールしてあったのだが、ちょっと試してみようとPHP5.2.3を入れてみた。CentOS4.4ではyumでインストールが出来ないので、ここでパッケージを見つけてインストール。
で、なんとなく下記のようなコードを書いた。
class A { private $hoge; public function getHoge(){ return $this->hoge; } public function setHoge(string $value = null){ $this->hoge = $value; } }
すると、
$a = new A();
$a->setHoge('hogehoge');
なんとこれがOKだった。(本来ならタイプヒントにstringは使えないので、エラーとなる筈。)
5.1でarrayがタイプヒントに使えるようになったが、intやstringは無理の筈。もしや5.2.3では使えるようになったとか?とか思ってしまったが、そうではないみたい。
class B {} $a = new A(); $a->setHoge(1); $a->setHoge(true); $a->setHoge(array()); $a->setHoge(new B());
これら全部有効でした。まさか全て暗黙的にキャストしてから代入してるのか?とも考えたがそんなこともなく、普通に数値やオブジェクトが代入されていた。更に、オブジェクトや配列をタイプヒントに指定しても、何でも引数に指定可能だった。どうやら、タイプヒントが全く機能していない模様。
バグかとも思ったが、それにしては酷過ぎるし、検索してみても他に同じような状況になっている人は居ないようなので、インストールしたパッケージに問題があったのかな?と。