【发布时间】:2013-04-08 21:07:18
【问题描述】:
我遇到了一些我认为是错误的事情,但我不确定。所以我来这里问问比我更了解这个的人,这是PHP的bug吗?看下面几行:
<h1>Tests</h1>
<?php
class Foo
{
public function __invoke()
{
return 'Called correctly';
}
}
class Boo
{
public function __construct()
{
$this->Foo = new Foo();
}
}
$Foo = new Foo();
echo $Foo();
echo "<br><br><hr><br><br>";
$Boo = new Boo();
echo $Boo->Foo();
根据the specification,由于The __invoke() method is called when a script tries to call an object as a function,我应该得到这个:
正确调用
正确调用
但是最后一个回显没有被执行。相反,我得到了这个:
PHP 致命错误:在第 26 行的 [...]/index.php 中调用未定义的方法 Boo::Foo()
这是一个错误还是预期的行为?如果这是一个错误,我们将非常感谢您提供有关如何提交它的帮助。
根据 Jon 的回答进行编辑以进一步显示丑陋的行为
class Doo
{
public function __construct()
{
// The Foo class is the same as the one defined before
$Test = new Foo();
echo $Test(); // Echos correctly
echo "<br><br><hr><br><br>";
$this->Foo = $Test;
echo $this->Foo(); // Error. Heisenbehaviour?
}
}
$Boo = new Doo();
【问题讨论】:
标签: php specifications magic-methods