为此我们要用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();
?>
