php面向对象-构造函数和析构函数详解

来源:互联网 发布:淘宝市场需求分析 编辑:程序博客网 时间:2024/06/10 04:13
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;//输出:张xxxecho $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 "<hr/>";//疑问:这里输出调用__destruct执行几次""?执行时字符串分别输出的位置?答:这里调用__destruct一次,在echo "<br />"的后面调用.疑问:这里可能很多初学者就会感到疑惑,__destruct不是在一个对象销毁时就自动调用吗,我unset($a)的时候为什么没调用呢.答:对象的传值方式默认是引用传递的,$d = $c = $b = $a;他们指向的是内存中的同一个对象,你unset($a)的时候,内存中的对象并没有销毁,还有另外几个指向这个对象,只有当你把指向内存中这个对象的变量全部unset掉这个对象才会被销毁:比如unset($a),unset($b),unset($c),$unset(d),


//问题一:

<pre name="code" class="php">$a = new destruct();$d = $c = $b = $a;unset($a);$b = false;$c = false;$d =  true;echo "<hr/>";//这里会调用几次__destruct()函数,分别指出调用的位置,比如:之前输出几次,之后输出几次















0 0