函数也可以是静态的,这样就可以用类直接访问,不需要新建对象来调用:
<?php
class marine
{
static $attackNumber = 10; //攻击力的数字
//这个函数表示机枪兵升级的运行代码
staticfunction upgrade()
{
self::$attacknum++;
}
}
?>
如果科技建筑升级完毕,直接就调用这个函数:
<?php marine::upgrade(); ?>
四、继承
兵营用来造机枪兵,坦克房用来制造坦克,他们都是建筑,但是却有很多不同,如果用一个类“建筑”来表示,很困难。
但我们要保留他们的共性,比如都能飞行,不希望飞行的代码在各个类重复写,又要让他们能各自独立的生产不同的东西。
所以我们可以用继承来处理,继承表示父子关系,被继承的叫父类,继承的叫子类。用extends表示继承
<?php
//建筑类
class building
{
function fly()
{
//建筑飞行的代码
}
}
//兵营类
class marineBuilding extends building
{
function createMarine()
{
//制造机枪兵的代码
}
}
//坦克房类
class tankBuilding extends building
{
function createTank()
{
//制造坦克的代码
}
}
?>
接下来,我们看看继承产生的效果:
<?php //如果造了一个兵营: $mb1 = new marineBuilding(); //一旦他需要飞行,就可以直接使用建筑类的函数fly(),尽管兵营类的定义里没有这个函数 $mb1->fly(); //而他要制造机枪兵的时候: $mb1->createMarine(); ?>
同样是继承建筑类的坦克房类,就无法制造机枪兵,因为这是兵营类的个性。
如果在子类中的函数调用父类的函数,要使用parent,比如parent::fly()
注意,一个类只能有一个父类,PHP不允许多重继承,也就是说一个孩子只能有一个爹,一个爹可以有N个孩子!
五、访问控制
如果用$attackNumber = 10表示属性的话,系统默认是public $attackNumber = 10,所以建议这样写:
<?php
class marine
{
public static $attackNumber = 10; //攻击力的数字
}
?>
public表示这个属性是公共的,也就是在任何地方都可以访问和操作的。
但这就存在一些问题,如果有玩家知道了类marine的一些代码结构,那他做个简单的补丁程序,运行的时候加载上去:
<?php //补丁 marine::$attackNumber = 10000; ?>
这样的话,他的机枪兵有10000的攻击力,呵呵,这样的话,谁打得过他!
