作者:shmily志伟 | 来源:互联网 | 2022-12-10 14:42
我正在尝试完成这个PHP挑战,我目前有这个代码:
get()->the()->answer();
if ($answer instanceof AnswerInterface) {
echo $answer . PHP_EOL;
}
}
}
interface AnswerInterface
{
public function get();
public function the();
public function answer();
}
class Answer implements AnswerInterface
{
public function get()
{
return new Answer();
}
public function the()
{
return new Answer();
}
public function answer()
{
return new Answer();
}
public function __toString()
{
return '4';
}
}
$answer = new Answer;
$question = new Question($answer);
当我运行这样的代码时,它给了我错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted
我可以通过在代码中插入以下内容来修复错误:
public function __construct() {}
我不完全理解这是如何工作的...我想了解这里发生了什么.任何帮助解释如何工作非常感谢.
1> jh1711..:
在PHP之前__construct
,您将通过命名与该类同名的方法来创建构造函数.这仍然受支持,但在PHP 7中已弃用.这意味着如果您的Answer
类没有现代构造函数(__construct
),则该answer
方法将作为构造函数调用.由于它返回a new Answer
,因此将在新对象上再次调用构造函数,并再次调用.您有一个无限递归,一旦内存耗尽就会抛出错误.
我只能猜出这次练习的原因是什么.但你也可以只返回$this
的get
,the
和answer
.如果您希望您的课程支持"链接",那么您通常会这样做.当然,在现实世界中,这些方法也可以做其他事情.