作者 : Bun Wong
日期 : 2009年02月09日
标签 : PHP
浏览 : 803 次
评论 : 1 个
http://www.hdwong.com/article/18/

Magic Methods of PHP (2)

技术交流 @ 2009年02月09日 收藏&分享

关于 Constructors and Destructors

个人觉得构造函数和析构函数没有啥特别值得说的,都是一些容易遗漏的地方:

  • 子类的构造/析构函数默认不会调用父类的,需要显式地调用 parent::__construct()parent::__destruct()
  • 总是需要 public,若为 private 或 protected 则 Fatal error
  • PHP 5 之前,不存在该两种 magic methods,为了兼容构造函数,可以用一个与类名相同的成员函数来取代

class Example1
{
    public function __construct($param)
    {
    }
    
    public function Example1($param)
    {
        $this->__construct($param);
    }
}

  • 调用 __destruct() 是对象不再被引用(显式 unset)或当脚本运行结束时调用,因此仅 new 对象而不赋对象给一个变量,将马上调用 __destruct()
  • 关于 desctructor 执行顺序,符合栈的 LIFO 原则,即创建实例的顺序是 A -> B -> C,则顺序为 C -> B -> A 地调用其对象内的 __destruct()。有下面的例外情况,顺序是 B -> A -> C,不明确其原因,我猜测是 C 为完成构造因此并未入栈,大家知道原因可以留言或 Email 给我哦 :)

class A
{
    public function __destruct()
    {
        echo 'A';
    }
}

class B
{
    public function __destruct()
    {
        echo 'B';
    }
}

class C
{
    public function __construct()
    {
        exit;  // terminate here
    }
    public function __destruct()
    {
        echo 'C';
    }
}

$a new A;
$b new B;
$c new C;

评论 (1)

  • #1. 番仔

    2009年02月09日

    木办法..又要来一趟

* 昵称:

* 评论:

* 验证码: (请输入下图的 4 位数字)

Captcha看不请, 换一张

© 2011 Bun Wong

本博客基于 Bun PHP Framework 构建 • 粤ICP备07036370号