在运行中实例化一个静态方法?

时间:2013-11-17 09:42:03

标签: php

我不太确定调用了以下对象实例,但它来自我正在阅读的文章。

class foo
{
    function out()
    {
        return 'hello';
    }
}

echo (new foo())->out();

自动实例化对象并调用out方法。但我真正理解的是,当我将out()方法重命名为虚构方法时,我得到如下错误:

示例:

class foo
{
    function out()
    {
        return 'hello';
    }
}

echo (new foo())->ou();

Fatal error: Call to undefined method foo::ou() in ...

这种方法是否以某种方式被称为静态方法?

2 个答案:

答案 0 :(得分:3)

::不代表static method,这是一种误解。 ::是“范围解析运算符”,它表示通过类谓词全名识别方法。

所以这只是意味着:“方法'ou'由类'foo'”定义。不是更多,而不是更少。

答案 1 :(得分:2)

没有。该错误仅表示该方法不存在。无论您是否以静态方式调用方法,它始终会显示此错误的::。如果您将代码更改为:

,则会出现相同的错误
$foo = new foo();
echo $foo->ou();

根据评论中的请求的第二个代码示例:

$moo = new moo(); // Parentheses optional, I guess
$foo = new foo($moo);
$foo->out();