読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

PHP5.3での無名関数内でのselfや$thisは解決できないから気をつけろ

ハマったのでメモ。
PHP5.4以降なら問題ないっぽい。
無名関数内でselfや$thisを使うとエラーになる。

<?php
class Hoge {
    public static function h() {
        return "hoge----!!!";
    }

    public function hh() {
        return "hogehoge----!!!";
    }
}
class Fuga extends Hoge {
    public static function f() {
        $f = function(){ return self::h(); }; // selfにはFugaを期待
        return $f();
    }

    public function ff() {
        $f = function(){ return $this->hh(); }; // $thisには$fugaを期待
        return $f();
    }
}

// ・staticメソッド
//
echo Fuga::f().PHP_EOL;
// PHP5.3の場合 エラー
// PHP Fatal error:  Using $this when not in object context in test.php on line 13
//
// PHP5.4の場合
// hoge----!!!


// ・インスタンスメソッド
$fuga = new Fuga();
echo $fuga->ff().PHP_EOL;
// PHP5.3の場合 エラー
// PHP Fatal error:  Using $this when not in object context in test.php on line 18
//
// PHP5.4の場合
// hogehoge----!!!


早く7出ないかなー。