<?php
class test
{
 var $str;
 function test()
 {
  if(version_compare(phpversion(),"5.0","<"))
  {
   echo "i am here";
   register_shutdown_function(array(&$this, "__destruct"));
  }
 }
 
 function add($str){
  $this->str.=$str;
 }
 
 function __destruct()
 {
  echo $this->str;
 }
 
}
function aaa()
{
 echo "aaa";
}
register_shutdown_function("aaa");
$hTest = new test();
$hTest->add("a");
$hTest->add("b");
$hTest->add("c");
?>如上,类内的__destruct并没有执行,这是为何?

解决方案 »

  1.   

    输出 aaaabc
    有什么问题吗?
      

  2.   

    for PHP4测试一下才行,register_shutdown_function本来就是为了兼容PHP4下没有析构函数的。
      

  3.   

    那么 php4 中 __destruct 会执行吗?
      

  4.   

    就是不会啊,我就是问这个问题啊。如果在PHP5中根本就不用这么写啊,本身就支持析构啊。
      

  5.   


    <?php
    class test
    {
     var $str;
     function test()
     {
      if(version_compare(phpversion(),"5.0","<"))
      {
       echo "i am here<br>";
       register_shutdown_function(array(&$this, "__destruct"));
      }
     }
     
     function add($str){
      $this->str.=$str;
      echo "now i am :".$this->str."<br>";
     }
     
     function __destruct()
     {
      echo "destruct<br>";
      var_dump($this->str);
     }
    }
    function aaa()
    {
     echo "out function<br>";
    }
    register_shutdown_function("aaa");
    $hTest = new test();
    $hTest->add("a");
    $hTest->add("b");
    $hTest->add("c");
    ?>输出:
    i am here
    now i am :a
    now i am :ab
    now i am :abc
    out function
    destruct
    NULL 问题基本上找到了,明显析构函数是已经执行的了,但是实例内的变量已经销毁了。有人有解决方法?