tohokuaikiのチラシの裏

技術的ネタとか。

get_classの引数がNULLの時の仕様で嵌った件

デバッグ時にget_classを良く使うのだけど。
http://jp2.php.net/get_class

返り値
オブジェクト object がインスタンス であるクラスの名前を返します。object がオブジェクトでない場合にはFALSEが返されます。
クラスの内部で object を省略すると、 そのクラスの名前を返します。

これ、PHP5.3で嵌りました。

<?php
class Hoge{
  function Hoge($hoge = null)
  {
    var_dump($hoge, get_class($hoge), get_class());
  }
}

new Hoge();
?>

この出力は
php5.2

NULL
bool(false)
string(4) "Hoge"

まぁ予想通り。

しかし・・・
php5.3

NULL
string(4) "Hoge"
string(4) "Hoge"

ちょ、NULL渡されてその実行時関数のクラス名を返されても困るんですが・・・。


PHPのバグレポに報告が挙がっていた。
PHP5.2と5.3では違うみたい。
http://bugs.php.net/bug.php?id=52605

cataphract@php.net/degeberg@php.netによるとDocumentが未整備ということで、今は直ってる(Documentがね)。

要はここの場所

5.3.0 以降 NULL が object のデフォルトとなりました。 したがって、NULL を object に渡すのは何も指定しないのと同じ意味ということになります。

うむむー。
確かにそのとおりである。バグではない。

しかし、やられてしまた。