繁体   English   中英

在析构函数中保存 - 不好主意?

[英]Saving in the destructor - bad idea?

在PHP应用程序中,在对象的析构函数中运行保存代码是不是一个坏主意? 我问,因为如果它没问题,那么我可以在父类Model的析构函数中添加一个save()调用,并省去了在其他任何地方记住的麻烦。

我知道这样做确实有效,因为我有一个完整的应用程序(虽然编写得很糟糕)。 但是有充分的理由不去做吗?

IMO,在析构函数中添加此类功能并不是最佳选择。 对我来说非常重要的原因是代码复杂性增加,可读性降低。 这个项目的第三个人最终将花费相当多的时间来搞清楚最新情况。

话虽如此,无论是理论上的好还是坏,都归结为所采用的编程逻辑。 如果有问题的类会在后期扩展,那么析构函数中的save()可能会让你感到悲伤; 再取决于你想要实现的目标。

不保证以任何顺序调用析构函数。 如果您的页面正在卸载并且所有对象教师开始被调用,会发生什么。 您永远不知道您需要使用的数据库对象是否仍然有效,或者是否已卸载。

实际上,PHP会尝试以正确的顺序销毁对象,所以它是非常安全的(考虑到你是否试图保存某些东西,这意味着你仍然在提供它的引用)。 您需要注意的是,在析构函数中抛出异常会导致致命错误,即使有捕获也是如此。 您可以使用示例,并且通过正常引用使PHP失败并不容易,这里有一个简单的方法让PHP使用析构函数变得疯狂,所以它不知道如何结束它们,但正如我所说,这不是你通常会发现的东西在你的代码中:

<?php
class A
{
    public $b;
    function eco()
    {
        echo 'AAA';
    }
    function __destruct()
    {
        $b->eco();
    }
}
class B
{
    public $a;
    function eco()
    {
        echo 'BBB';
    }
    function __destruct()
    {
        $a->eco();
    }
}
$a = new A;
$b = new B;
$a->b = $b;
$b->a = $a;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM