【问题标题】:Undefined method when using anonymous functions使用匿名函数时未定义的方法
【发布时间】:2015-05-12 00:00:10
【问题描述】:

PHP 为以下代码返回 Call to undefined method stdClass::fragmentr()

$core = new \StdClass;

$core->fragmentr = function($frag) {
    $path = sprintf("fragments/%s.php", $frag);

    if(is_file($path)) {
        include $path;
    } else {
        header("Location: ./?p=500");
        exit;
    }
}

/* SNIP */

$core->fragmentr('header');

但是,函数 $core->fragmentr 被明确定义为分配给变量的匿名函数。有什么想法吗?

【问题讨论】:

    标签: php


    【解决方案1】:

    这是因为您的 stdClass 没有名为:fragmentr 的方法,但它有一个名为:fragmentr 的属性,因此您可以执行以下操作:

    $property = $core->fragmentr;
    $property("header"); 
    

    如你所见,你不能直接调用你的Closure,所以你必须将它分配给一个变量,然后你才能调用它

    【讨论】:

    • 除了创建一个类之外,还有什么方法可以使用 $var->func() 语法来调用它吗?但是谢谢,这是一个很好的答案。
    • @Saikyr 不是直接的,但你可以这样做:stackoverflow.com/a/2938020/3933332
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多