为此我们要用private,表示这个属性只有类里面的函数才能访问:
<?php class marine { private static $attackNumber = 10; //攻击力的数字 //这个函数表示机枪兵升级的运行代码 function upgrade() { //这样防止无限升级 if(self::$attacknum<13) { self::$attacknum++; } } } ?>
这样一来,只有升级才能改变机枪兵的攻击力。
但是现在往往是团队开发,而且很多用到类的继承,如果private的话,子类就无法访问了,但又不希望随便都可以修改某些属性。
那么可以用protected,protected的属性可以被子类的函数访问。
六、重载
6.1、属性重载
如果我们把地面部队作为一个类,让机枪兵类来继承他,这时候如果地面部队类和机枪兵类里面都定义了攻击力$attackNumber,那么每个兵的攻击力就决定于机枪兵类,而不是地面部队。这就叫做重载。
<?php //地面部队 class groundArmy { public $attackNumber = 5; } //机枪兵 class marine extends groundArmy { public $attackNumber = 10; //攻击力的数字 } $m1 = new marine();//新建一个机枪兵 echo $m1->attackNumber;//显示攻击力为10 ?>
6.2、函数重载
重载也可以用于函数,子类的函数如果和父类函数同名,除非另行说明,否则子类的对象默认调用子类内的函数。
比如人族的鬼兵类ghost和神族类的黑暗圣堂类(隐刀),都是隐形兵种,但是鬼兵隐形的时候会减少能量,黑暗圣堂根本没有能量属性。
如果我们把隐形能力作为父类,鬼兵类ghost和神族类的黑暗圣堂类DarkTemplar来继承它,同时实现不同的隐形代码:
<?php //隐形能力类 class concealAbility { //这个函数表示隐形的运行代码 function conceal() { //隐形的运行代码 } } //鬼兵类 class ghost extends concealAbility { $energy = 150; //这个函数表示隐形的运行代码 function conceal() { //隐形的运行代码 //减少鬼兵的能量,$this表示当前对象,也就是当前这个鬼兵 $this->energy -= 25; } } //黑暗圣堂类 class DarkTemplar extends concealAbility { //这个函数表示隐形的运行代码 function conceal() { //隐形的运行代码,不影响能量 } } //新建一个鬼兵 $g1 = new ghost(); //显示能量为150 echo $g1->energy; //鬼兵隐形 $g1->conceal(); //显示能量为125 echo $g1->energy; //新建一个黑暗圣堂 $d1 = new DarkTemplar(); //黑暗圣堂隐形,他没有能量属性 $g1->conceal(); ?>