Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php析构函数是否适合显示HTML?_Php_Destructor - Fatal编程技术网

使用php析构函数是否适合显示HTML?

使用php析构函数是否适合显示HTML?,php,destructor,Php,Destructor,如果实现了一个类,该类通过构造并调用各种方法为页面构建HTML,那么在析构函数中定义该类的显示/回显部分是否合适 而不是显式的类:displayHTML()方法,在析构函数中有echo$this->html,并且每当您准备好显示callunset($object)哪个将显示它 我知道析构函数可能不是最好的地方,但想知道其他人对此有什么想法 这两者中哪一个有更明显的结果 unset($object); 或: 想一想,然后读一读对我来说不可行的。。unset不等于echo。这是一件根本不同的事情。

如果实现了一个类,该类通过构造并调用各种方法为页面构建HTML,那么在析构函数中定义该类的显示/回显部分是否合适

而不是显式的
类:displayHTML()
方法,在析构函数中有
echo$this->html
,并且每当您准备好显示call
unset($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();