Php 使用静态方法动态实例化对象?

Php 使用静态方法动态实例化对象?,php,Php,我不太确定下面的对象实例化被称为什么,但它来自我正在阅读的一篇文章 class foo { function out() { return 'hello'; } } echo (new foo())->out(); 对象被自动实例化并调用out方法。但我真正不明白的是,当我将out()方法重命名为一个虚构的方法时,会出现如下错误: 例如: class foo { function out() { return 'h

我不太确定下面的对象实例化被称为什么,但它来自我正在阅读的一篇文章

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 ...

这个方法是否被称为静态方法

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

$foo = new foo();
echo $foo->ou();
根据注释中的请求,第二个代码示例:

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

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

$foo = new foo();
echo $foo->ou();
根据注释中的请求,第二个代码示例:

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

不代表
静态方法,这是一个错误的概念。
是一个“作用域解析运算符”,它表示通过类谓词全名来标识方法


所以这仅仅意味着:“由类‘foo’定义的方法‘ou’”。不多不少

这个
并不代表
静态方法,这是一个错误的概念。
是一个“作用域解析运算符”,它表示通过类谓词全名来标识方法


所以这仅仅意味着:“由类‘foo’定义的方法‘ou’”。不多不少

在第二个示例中,该方法在对象中仍然命名为
out
,但您尝试调用
ou
@Lepidosteus,这是非常正确的,但这不是问题的所在。@GolezTrol:这就是为什么这是一条注释,而不是一条注释answer@Lepidosteus这不是重点。SarmenHB故意在代码中犯下此错误以产生错误,并且对错误消息中的确切描述有疑问,而不是对错误发生的原因有疑问。:)@我知道。但是有目的地编写不完整的代码,然后试图从中找出内部代码并不是学习语言如何工作的好方法;只要等到他进入未定义行为的领域……在你的第二个例子中,该方法在对象中仍然命名为
out
,但你试图调用
ou
@Lepidosteus,这是非常正确的,但这不是问题的所在。@GolezTrol:这就是为什么这是一个注释,而不是一个注释answer@Lepidosteus这不是重点。SarmenHB故意在代码中犯下此错误以产生错误,并且对错误消息中的确切描述有疑问,而不是对错误发生的原因有疑问。:)@我知道。但是有目的地编写不完整的代码,然后试图从中找出内部代码并不是学习语言如何工作的好方法;只要等到他进入了一个行为不明确的领域……还有一个问题,很抱歉与上面的问题几乎无关,但是像这样的事情怎么会像你的答案那样写出来呢?(新foo(新moo))->out();谢谢,那么您的示例是否与这样做有关呢?:函数foo(moo$myvar){…}或者它是另一个故事我真的不知道您的意思。该声明是foo的函数声明,而不是类声明。它使用类型暗示来强制您向函数传递实际的“moo”。如果您传递了其他内容,PHP将给出一个错误。还有一个问题,很抱歉,与上面的问题几乎无关,但是这样的内容与您的答案如何?(新foo(新moo))->out();谢谢,那么您的示例是否与这样做有关呢?:函数foo(moo$myvar){…}或者它是另一个故事我真的不知道您的意思。该声明是foo的函数声明,而不是类声明。它使用类型暗示来强制您向函数传递实际的“moo”。如果您传递了其他内容,PHP将给出一个错误。