PHP5.3.29まではクロージャの中でselfは使えないので「Fatal error: Cannot access self:: when no class scope is active 」というエラーになります。PHP各バージョンでの実行結果の比較はOnline PHP editor | output for iCEhrで見れます。
<?php
class Foo
{
const HOGE = 1;
public static function callClosure()
{
$closure = function () {
var_dump(self::HOGE); // エラーになる
};
$closure();
}
}
Foo::callClosure();
解決策としては①のようにクラス名を直接指定します。
<?php
class Foo
{
const HOGE = 1;
public static function callClosure()
{
$closure = function () {
var_dump(Foo::HOGE); // ①
};
$closure();
}
}
Foo::callClosure();