在类中, 有一个构造函数,
就是用来初始化对象用的.
利用构造函数,你有机会操作对象,
并改变他的值
<?php /*** ====笔记部分==== 构造函数 __construct() ***/ /**** 代码部分 ****/ header('Content-type:text/html; charset=utf-8'); class Human { public $name = '李四'; public $gender = '男'; } $a = new Human(); $b = new Human(); $c = new Human(); echo $a->name,'<br />'; echo $b->name,'<br />'; echo $c->name,'<br />'; echo $a->gender,'<br />'; echo $b->gender,'<br />'; echo $c->gender,'<br />'; /* 在上面的例子中, 体现出类是模板,对象根据模板造出的实例. 但是,模板是固定的. 因此,导致造出来的对象,各种属性值都一样. 这显示与现实生活中的逻辑不符. 比如: 新生儿, 性别 姓名 体重 这些都不一样. 同一个模板,不同的对象 这就是一对矛盾? 答:___ 想一想: 为什么新生儿有的是男,有的是女? 答:因为,染色体不一样. x,y ->男 x,x-->女 造对象时,传x染色体,还是y染色体,都有可能 这就说明创建对象时,可以传参 在类中, 有一个构造函数, 就是用来初始化对象用的. 利用构造函数,你有机会操作对象, 并改变他的值 */
<?php /*** ====笔记部分==== 构造方法 __construct(); 注意 前面是两个下滑线 构造方法的作用时机: 每当new一个对象,就会自动新new出来的对象发挥作用 new ClassName($args); $args参数原样传给构造方法; 然后构造方法,用参数来影响新创建的对象 当然:new ClassName() 也可以不传参 但注意: $args要与构造方法里的参数一致. ***/ /* class Human { public function __construct() { echo '紫微星下凡了!'; } public $name = null; public $gender = null; } $a = new Human(); */ // 构造函数的传参,并影响对象 /* class Human { public function __construct() { $this->name = '李四'; $this->gender = '女'; } public $name = null; public $gender = null; } $a = new Human(); $b = new Human(); $c = new Human(); echo $a->name,'<br />'; // 李四 echo $b->name,'<br />'; // 李四 echo $c->name,'<br />'; // 李四 */ class Human { public function __construct($name,$gender) { $this->name = $name; $this->gender = $gender; } public $name = null; public $gender = null; } $a = new Human('张飞','男'); $b = new Human('空姐','女'); $c = new Human('孙二娘','女'); $d = new Human(); echo $a->name,'<br />'; // 张飞 echo $b->name,'<br />'; // 空姐 echo $c->name,'<br />'; // 孙二娘
<?php /*** ====笔记部分==== 析构函数: __destruct() 构造函数是在对象产生的时候,自动执行 析构函数是在对象销毁的时候,自动执行 构造函数就是出生时啼哭 析构函数就是临终遗言 对象如何销毁? 1:显式的销毁, unset ,赋值为NULL,都可以 2:PHP是脚本语言,在代码执行到最后一行时, 所有申请的内存都要释放掉. 自然,对象的那段内存也要释放,对象就被销毁了. 对于PHP所做的WEB程序,想犯内存泄露的错误也很难. ***/ class Human { public $name = null; public $gender = null; public function __construct() { echo '出生了<br />'; } public function __destruct() { echo '终究没能逆袭!<br />'; } } $a = new Human(); $b = new Human(); $c = new Human(); $d = new Human(); unset($a); $b = true; $c = NULL; // 死3次 echo '<hr />'; /* 63行也执行完毕,页面执行完毕, $d 得回收, */ /*** 最后一次销毁,是PHP的页面执行完毕了,63行也执行完毕了. 然后系统回收, $d此时才销毁, 因此 显示hr 即灰线后面 ***/
<?php /*** ====笔记部分==== 疑问: 1:把对象赋值为其他,比如true 会不会销毁对象? 小K (21:07:15) 试了下,也可以 2:上一页的案例 为什么销毁一个 空2个 最后一个会出现在灰线下面? 答: 最后一次销毁,是PHP的页面执行完毕了,63行也执行完毕了. 然后系统回收, $d此时才销毁, 因此 显示hr 即灰线后面 ***/ /**** 代码部分 ****/ /// 对象的回收机制 /// class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $a = new Human(); $b = $c = $d = $a; echo $a->name,'<br />'; echo $b->name,'<br />'; $b->name = '李四'; echo $a->name,'<br />'; echo $b->name,'<br />'; unset($a); // $b,$c,$d在指向对象,因此对象不能销毁. echo '<hr />'; /* 1:死几次 2:死上灰线上,还是死在灰线下 */ /* 在此处,页面运行完毕,对象销毁,执行析构函数. 销毁了几个对象? 答: 只有一个对象,只死1次 死在系统回收时,即页面执行完毕,因此在灰线下. */
相关:

我的微信
这是我的微信扫一扫
2016年8月16日 下午10:51 1F
总结的很到位!不错!