构造函数:
__construct()
构造函数,在创建新的类对象是加载,参数可以自己定
示例:
class a{
public function __construct(){
echo "new class a";
}
}
$obj_a=new a();
结果:
new class a
如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。
示例:
class a{
public function a(){
echo "no construct function use same name function";
}
public function __destruct(){
}
}
$obj_a=new a();
结果:
no construct function use same name function
自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。
示例:
namespace mytest\a;
class a{
public function a(){
echo "no construct function use same name function";
}
public function __destruct(){
}
}
$obj_a=new a();
结果:
空
如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。
示例:
class father{
public function __construct(){
echo "this is father<br>";
}
}
class childa extends father{
}
class childb extends father{
public function __construct(){
echo "this is b<br>";
}
}
class childc extends father{
public function __construct(){
parent::__construct();
echo "this is c<br>";
}
}
$obj_a=new childa();
$obj_b=new childb();
$obj_c=new childc();
结果:
this is father
this is b
this is father
this is c
析构函数:
void __destruct();
PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
示例:
class a{
private $objname;
public function __construct($objname){
$this->objname=$objname;
echo "start<br>";
}
public function __destruct(){
echo $this->objname." end<br>";
}
}
$obj_a=new a('a');
$obj_b=new a('b');
echo "use unset<br>";
unset($obj_b);
echo "has unset b<br>";
结果:
start
start
use unset
b end
has unset b
a end
和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。
此处不做示例了
析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。
示例:
class a{
private $objname;
public function __construct($objname){
$this->objname=$objname;
echo $this->objname." start<br>";
}
public function __destruct(){
echo $this->objname." end<br>";
}
}
$obj_a=new a('a');
exit;
结果:
a start
a end