PHP 手册
后退 | 章 18. 类与对象（PHP 4） | 前进

# 构造函数

构造函数是类中的一个特殊函数，当使用 new 操作符创建一个类的实例时，构造函数将会自动调用。当函数与类同名时，这个函数将成为构造函数。如果一个类没有构造函数，则调用基类的构造函数，如果有的话。

`<?php class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item ("10", 1); } } ?>`

上文定义了一个 Auto_Cart 类，即 Cart 类加上一个构造函数，当每次使用“new”创建一个新的 Auto_Cart 类实例时，构造函数将自动调用并将一件商品的数目初始化为“10”。构造函数可以使用参数，而且这些参数可以是可选的，它们可以使构造函数更加有用。为了依然可以不带参数地使用类，所有构造函数的参数应该提供默认值，使其可选。

`<?php class Constructor_Cart extends Cart { function Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); } } // 买些同样的无聊老货 $default_cart = new Constructor_Cart; // 买些实在货... $different_cart = new Constructor_Cart("20", 17); ?>`

也可以使用 @ 操作符来抑制发生在构造函数中的错误。例如 @new。

`<?php class A { function A() { echo "I am the constructor of A.<br>\n"; } function B() { echo "I am a regular function named B in class A.<br>\n"; echo "I am not a constructor in A.<br>\n"; } } class B extends A { function C() { echo "I am a regular function.<br>\n"; } } // 调用 B() 作为构造函数 $b = new B; ?>`

类 A 中的函数 B() 将立即成为类 B 中的构造函数，虽然并不是有意如此。PHP 4 并不关心函数是否在类 B 中定义的，或者是否被继承来的。

注意
PHP 4 不会从派生类的构造函数中自动调用基类的构造函数。恰当地逐次调用上一级的构造函数是用户的责任。

析构函数是一种当对象被销毁时，无论使用了 unset() 或者简单的脱离范围，都会被自动调用的函数。PHP 中没有析构函数。可以用 register_shutdown_function() 来替代模拟大多数析构函数的效果。

后退 | 起点 | 前进
继承 | 上一级 | 作用域分辨运算符（::）