类与对象

一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。

当一个方法在类定义内部被调用时,有一个可用的伪变量 $this 。 $this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象静态调用时也可能是另一个对象)。

1.构造函数 __construct ():

如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct() 。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

与其它方法不同,当 __construct() 被与父类 __construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT 错误信息。

2.析构函数 __destruct():

析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct() 。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

class Foo{

    public $i = "I=12345678\n";

    public function showI(){

        echo($this->i);

    }

    public function __destruct(){

        echo("in __destruct\n");

        if($GLOBALS['flag'])

            $GLOBALS['test'][0] = $this;

    }

}

$flag = true;

$test = [new Foo()];

echo("deleting Foo\n");

unset($test[0]);

echo("deleted Foo\n");

$test[0]->showI();

$flag = false;

echo("re-deleting Foo\n");

unset($test[0]);

echo("deleted Foo\n");

你可能感兴趣的:(类与对象)