我找到了以下代码。这是一个特定的模式,或者可能是构造这样的代码的原因 - 还是仅仅是伪造的?
class ExportCSV extends Export
{
// some private and public vars
public function __construct($arg)
{
// [...]
new CustomerReport($this);
}
public function procCallback($proc)
{
switch($proc){
case "customer":
new InvoiceReport($this);
break;
case "invoice":
new PrepaymentReport($this);
break;
case "prepayment":
new RefundReport($this);
break;
case "refund":
$this->sendMail();
break;
}
}
}
class CustomerReport extends Foobar
{
private $inst;
public function __construct($inst)
{
$this->inst = $inst;
$this->exportCustomers($inst->from, $inst->to);
}
public function __destruct()
{
$this->inst->procCallback("customer");
}
}
答案 0 :(得分:2)
正如raina77ow所说,是一种模式的实现。此外,在应用程序生命周期中销毁对象后,您必须考虑要执行的操作。让我们考虑以下示例(请,它只是一个示例!)
让我们假设您正在尝试实现MVC模式,而您应该成为“查看部分”的人。那么你需要什么?你需要获取请求中生成的所有变量,一旦它们准备好在响应中使用(通过控制器和模型),它们应该被渲染到视图中。一种方法(当然,除此之外)是通过魔术方法__destruct()实现这种模式(Observer)。例如:
// your code here
public function __destruct() {
$this->grabAllTheVarsAndRenderThem();
// or you can include the views file
extract($this->viewParams);
include_once('my_file_view.php');
}
这只是一个例子,顺便说一句,非常详细(,你可以在方法名称中看到)。但是这个例子背后的想法是,在对象被销毁之前绑定一些行为。
当然,在很多情况下你可以 - 而且你应该 - 实现这种模式,这只是一个例子来解释使用这种神奇方法的感觉。
希望它有所帮助!
答案 1 :(得分:1)
我不会在析构函数中调用显示的代码'Logic':它实际上是Observer模式的实现。
我假设它的工作方式如下:首先,当创建CustomerReport
对象时,其构造函数将注册一些观察对象(可能使用$this->exportCustomers
方法,由于某些原因,此处未显示该主体)在$inst
字段中。每次更改此对象的状态时,将通知这些观察对象。当然,对这个物体的破坏也可以看作是改变它的状态。 )
答案 2 :(得分:0)
可能是这部分代码的原始开发人员不信任用户(也可能是这些库的同一个人( - :),并希望确保每个CustomerReport
创建会调用协作者对象(他们可能会释放一些锁或其他关键资源)。