微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在新的stdClass中声明一个匿名函数

只是想知道为什么这样的事情不起作用:
public function address($name){
    if(!isset($this->addresses[$name])){
        $address = new stdClass();
        $address->city = function($class = '',$style = ''){
            return $class;
        };          
        $this->addresses[$name] = $address;
    }
    return $this->addresses[$name];
}

调用它像echo $class-> address(‘name’) – > city(‘Class’)应该只是echo Class,但是我得到致命错误调用undefined方法stdClass :: city()

我可以找到一个更好的方式来做到这一点,因为这会变得凌乱,但是我想知道我可能在做什么错,或者如果PHP不支持这个,为什么.

调用致命错误时,PHP是正确的调用undefined方法stdClass :: city()因为对象$class-> address(‘name’)没有方法城市.
Intead,这个对象有属性城市,是Closure Class( http://www.php.net/manual/en/class.closure.php)的实例
您可以验证这一点:var_dump($class-> address(‘name’) – > city)

我发现调用这个匿名函数方法是:

$closure = $class->address('name')->city;
$closure('class');

希望这可以帮助!

原文地址:https://www.jb51.cc/php/130739.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐