PHP面向对象构造和析构函数
一、构造函数
用来生成对象的函数
<?php class Ren{ public $name; public $sex;//性别是人一出生就知道的,可以用构造函数来定义 /*public function Ren(){ } */ //构造函数不常用 public function __construct(){ }//构造函数常用 } ?>
1、构造函数写法特殊
函数名和类名保持一直或者直接用__construct ( __双下划线)
2、执行特殊
new的时候自动执行不用调用
造对象的时候执行
<?php class Ren{ public $name; public $sex; public function __construct($sex){ $this->sex = $sex; echo "测试一下"; } } $r = new Ren("男"); $r->name = "张三"; var_dump($r); ?>
二、析构函数
对象销毁前调用,因为PHP等语言都有垃圾回收机制所以一般用不到
<?php class Ren{ public $name; public $sex; public function __construct($sex){ $this->sex = $sex; } public function __destruct(){ echo "销毁"; }//执行完name后没有可执行的 会自动销毁内容 } $r = new Ren("男"); $r->name = "张三"; ?>
销毁
实例
<?php //设置当前页面编码格式为gbk header("Content-type:text/html; charset=gbk"); class hero{ public $name; //名字 public $blood; //血量 public $attack; //攻击力 //放技能的方法 public function jineng(){ $arr = array( array(50,"隔山打牛"), array(60,"降龙十八掌"), array(45,"九阳神功"), array(20,"葵花宝典"), array(70,"六脉神剑") ); $gs = count($arr); $sy = rand(0,$gs-1); echo "{$this->name}使用了{$arr[$sy][1]}\n"; return $arr[$sy][0]; } //构造函数 public function __construct($name,$blood,$gjl){ $this->name = $name; $this->blood = $blood; $this->attack = $gjl; } } //造第一个人 $h1 = new hero("狗蛋",800,15); //造第二个人 $h2 = new hero("大壮",700,16); while(true){ //随机一下,是普攻还是放技能 $sj1 = rand(0,1); $gj = 0; //本次h1能打掉多少血 echo "{$h1->name}打{$h2->name}\n"; if($sj1){ $gj = $h1->jineng(); }else{ $gj = $h1->attack+rand(0,20); } $h2->blood = $h2->blood-$gj; echo "{$h1->name}打掉了{$h2->name}的{$gj}血\n"; echo "******************************\n"; $sj2 = rand(0,1); $gj2 = 0; //本次h2能打掉多少血 echo "{$h2->name}打{$h1->name}\n"; if($sj2){ $gj2 = $h2->jineng(); }else{ $gj2 = $h2->attack+rand(0,20); } $h1->blood = $h1->blood-$gj2; echo "{$h2->name}打掉了{$h1->name}的{$gj2}血\n"; echo "******************************\n"; if($h2->blood<=0){ echo "{$h1->name}赢了"; break; }else if($h1->blood<=0){ echo "{$h2->name}赢了"; break; } echo "----\n\n\n"; //休眠 sleep(3); }
用cmd运行