php面向对象中构造函数(__construnct)和析构函数详解(__destruct)
//在实际运用中构造函数的作用可以用来给属相初始化值,或初始化操作,话不啰嗦,例子更能形象说明:
class homan{
public function __construct(){
echo "生成对象时系统自动调用__construct";
}
}
$object = new homan;//这里会自动输出这些内容:生成对象时系统自动调用__construct,因为在对一个类实例化时,系统会自动调用构造函数
class homan{
public $name = null;
public $age = null;
public function __construct($name, $age){
$this -> name = $name;
$this -> age = $age;
}
}
$object = new homan("张xxx","28");
echo $object->name;//输出:张xxx
echo $object->age;//输出:28;
//因为在生成对象时,系统就会去自动调用类中的construct构造函数,并传递了两个参数,为属性进行初始化赋值
//构造函数调用父类的构造函数
class god extends homan{
public $gender = "男";
public function __construct(){
parent::__construct();
}
}
//php中的子类不会自动调用父类的构造函数,需要我们自己去触发父类的构造函数,否则父类的构造函数在子类中会被覆盖!
//destruct析构函数详解
//destruct析构函数在实际应用中,多数用于在对象销毁和数据库连接完毕之后自动关闭资源
class destruct()}{
public function __destruct(){
echo "调用__destruct";
}
}
$a = new destruct();
$d = $c = $b = $a;
unset($a);
echo "
";
//疑问:这里输出调用__destruct执行几次""?执行时字符串分别输出的位置?
答:这里调用__destruct一次,在echo "
"的后面调用.
疑问:这里可能很多初学者就会感到疑惑,__destruct不是在一个对象销毁时就自动调用吗,我unset($a)的时候为什么没调用呢.
答:对象的传值方式默认是引用传递的,$d = $c = $b = $a;他们指向的是内存中的同一个对象,你unset($a)的时候,内存中的对象并没有销毁,还有另外几个指向这个对象,只有当你把指向内存中这个对象的变量全部unset掉这个对象才会被销毁:比如unset($a),unset($b),unset($c),$unset(d),
//问题一:
$a = new destruct();
$d = $c = $b = $a;
unset($a);
$b = false;
$c = false;
$d = true;
echo "
";
//这里会调用几次__destruct()函数,分别指出调用的位置,比如:之前输出几次,之后输出几次