2

在 PHP 5.3.3 上,下面的代码将失败并出现以下错误。

没有类作用域处于活动状态时无法访问 static::

我知道这是因为匿名函数创建了自己的范围,并且不在类的范围内。那么是什么让它在 PHP 5.5.0 中工作?它也适用于 PHP 5.4 吗?PHP 5.3 不显式调用的解决方案是什么PathController::do_something()

<?php

class PathController
{
    public function get_route()
    {
        return Response::json(Cache::remember('route_point', 10, function() {
            $type_count = array();
            foreach (array("Sprint", "Score", "Section") as $type) {
                $type_count[$type] = static::do_something($type);
            }

            return $type_count;
        }
    }

    //...
}
4

1 回答 1

3

$this对于公共方法,解决方法与PHP 5.3中的作用域基本相同:

$class = get_called_class();
$that  = $this;

return Response::json(..., function () use ($class, $that) {
   ...
   call_user_func(array($class, 'do_something_static'), $type);
   $that->do_something_non_static($type);
   ...
});

这不适用于非公共方法,并且没有真正优雅的解决方法。

于 2013-08-19T10:32:13.420 回答