使用php析构函数是否适合显示HTML?
如果实现了一个类,该类通过构造并调用各种方法为页面构建HTML,那么在析构函数中定义该类的显示/回显部分是否合适 而不是显式的使用php析构函数是否适合显示HTML?,php,destructor,Php,Destructor,如果实现了一个类,该类通过构造并调用各种方法为页面构建HTML,那么在析构函数中定义该类的显示/回显部分是否合适 而不是显式的类:displayHTML()方法,在析构函数中有echo$this->html,并且每当您准备好显示callunset($object)哪个将显示它 我知道析构函数可能不是最好的地方,但想知道其他人对此有什么想法 这两者中哪一个有更明显的结果 unset($object); 或: 想一想,然后读一读对我来说不可行的。。unset不等于echo。这是一件根本不同的事情。
类:displayHTML()
方法,在析构函数中有echo$this->html
,并且每当您准备好显示callunset($object)代码>哪个将显示它
我知道析构函数可能不是最好的地方,但想知道其他人对此有什么想法 这两者中哪一个有更明显的结果
unset($object);
或:
想一想,然后读一读对我来说不可行的。。unset不等于echo。这是一件根本不同的事情。此外,请记住,对象不仅在取消设置时销毁,而且在不再引用对象和/或脚本终止时也会销毁。这可能会产生很多不必要的副作用
如果您不想拥有/调用displayHTML()
或render()
方法,请在\uu toString()
中实现该部分,然后只回显实例
class HTMLSomething
{
/* ... */
public function __toString()
{
/* create $output */
return $output;
}
}
$something = new HTMLSomething;
echo $something;
这似乎是个坏主意。我真的不明白这一点:
unset($view);
比这更好
$view->displayHTML();
看起来唯一真正的优势是您不需要真正调用unset()
(因为在脚本末尾应该会发生这种情况)
然而,这真的是一件好事吗?那么如何防止它被显示呢?一旦设定好,你就不能。或者您需要一个特殊的clear()
函数在析构函数自动输出之前取消设置输出
对我来说,我看不出这有什么好处。这不是一个好办法,因为你不能完全控制你的析构函数。脚本完成时将调用析构函数,但您可能不希望在某些条件下显示任何内容(例如:加载、验证、验证失败、显示其他内容)
此外,正如多米尼克指出的,还有可读性问题。您不想在一年后阅读代码并说:为什么我要取消设置对象?我当时在想什么。正如您所见,这将增加WTF/分钟比率,我们都知道这是一件坏事。为什么要混淆您自己的代码?同意。让析构函数输出HTML是一个完全出乎意料的结果。这是一个很好的参考链接,我希望我能接受两个答案!我完全忘记了uuu-toString方法。回答得很好。另外,脚本结束时也会调用_deconstruct(),因此即使没有unset,也会调用它,这可能会导致一些奇怪的行为
$view->displayHTML();