Php 保存在析构函数中-坏主意?

Php 保存在析构函数中-坏主意?,php,orm,destructor,Php,Orm,Destructor,在PHP应用程序中,在对象的析构函数期间运行保存代码会是一个坏主意吗?我这样问是因为如果可以的话,我可以在父模型类的析构函数中添加一个save()调用,省去了记住其他地方的麻烦 我知道这样做是可行的,因为我有一个完整的应用程序(尽管写得很糟糕)在上面运行。但是有充分的理由不这样做吗?在我看来,在析构函数中添加这样的功能不是最好的选择。其中一个对我来说非常重要的原因是增加了代码的复杂性,降低了可读性。新加入该项目的第三人最终将花费相当多的时间来弄清发生了什么 话虽如此,无论理论上是好是坏,都取决于

在PHP应用程序中,在对象的析构函数期间运行保存代码会是一个坏主意吗?我这样问是因为如果可以的话,我可以在父模型类的析构函数中添加一个
save()
调用,省去了记住其他地方的麻烦


我知道这样做是可行的,因为我有一个完整的应用程序(尽管写得很糟糕)在上面运行。但是有充分的理由不这样做吗?

在我看来,在析构函数中添加这样的功能不是最好的选择。其中一个对我来说非常重要的原因是增加了代码的复杂性,降低了可读性。新加入该项目的第三人最终将花费相当多的时间来弄清发生了什么


话虽如此,无论理论上是好是坏,都取决于所采用的编程逻辑。如果所讨论的类将在后期进行扩展,那么析构函数中的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;

如何知道在析构函数中保存是合适的?可能是用户按下了cancel…@MitchWheat,因为它是一个web应用程序,对象只在一个请求的生命周期内存在。因此,在此期间不可能取消。正在销毁的DB对象是kicker。PHP只对没有引用的对象调用
\uu destruct
函数。因此,如果您有一个对DB对象的引用,在您有机会使用它之前,它不会被销毁,PHP仍然尝试先解构
$a