构造函数
构造函数是类中的一个特殊函数,当使用 new 操作符创建一个类的实例时,构造函数将会自动调用。PHP 3 中,当函数与类同名时,这个函数将成为构造函数。PHP 4 中,在类里定义的函数与类同名时,这个函数将成为一个构造函数 - 区别很微妙,但非常关键(见下文)。
上文定义了一个 Auto_Cart 类,即 Cart 类加上一个构造函数,当每次使用“new”创建一个新的 Auto_Cart 类实例时,构造函数将自动调用并将一件商品的数目初始化为“10”。构造函数可以使用参数,而且这些参数可以是可选的,它们可以使构造函数更加有用。为了依然可以不带参数地使用类,所有构造函数的参数应该提供默认值,使其可选。
你也可以使用 @ 操作符来消除发生在构造函数中的错误。例如 @new。
PHP 3 中,在上面的示例中将不会有构造函数被调用。PHP 3 的规则是:“构造函数是与类同名的函数”。这里,类的名字是 B,但是类 B 中没有函数 B()。什么也不会发生。 PHP 4 修正了这个问题,并介绍了另外的新规则:如果一个类没有构造函数,如果父类有构造函数的话,父类的构造函数将会被调用。PHP 4 中,上面的例子将会输出“I am the constructor of A.<br>”。
如果是 PHP 3,类 A 中的函数 B() 将立即成为类 B 中的构造函数,虽然并不是有意如此。PHP 3 中的规则是:“构造函数是与类同名的函数”。PHP 3 并不关心函数是不是在类 B 中定义的,或者是否已经被继承。 PHP 4 修改了规则:“构造函数与定义其自身的类同名”。因而在 PHP 4 中,类 B 将不会有属于自身的构造函数,并且父类的构造函数将会被调用,输出“I am the constructor of A.<br>”。 【译者注】这里似乎有问题,实际输出的结果,并不象这里说的那样。实际输出的内容是“I am a regular function named B in class A......”,输出的是 B() 的内容。也就是说,例子中的注释“This will call B() as a constructor”是正确的。如果从 A 类中移除函数 B(),那么将输出 A() 的内容。
析构函数是一种当对象被销毁时,无论使用了 unset() 或者简单的脱离范围,都会被自动调用的函数。但 PHP 中没有析构函数。 | ||||||||||||