微信号:blogread

介绍:本号收录IT领域的优秀技术博客;在这里你可以找到Web开发、系统架构、数据库、前端技术、用户体验等领域的前沿文章. 官网:http://blogread.cn/it/

用星际争霸讲解面向对象的概念

2013-06-19 21:11 IT技术博客大学习

  在学习PHP的时候,感觉自己对面向对象理解还不深刻,很多时候是一头雾水。通过别人的推荐,找到了这篇通过星际争霸来讲解面向对象概念的文章,转载出来供有需要的朋友学习。

  一、类和对象

  如果玩家制造了一个机枪兵,那么我们怎么表示他呢,因为每个机枪兵有几个基本的数据要记录:剩余的血,杀敌数量,攻击力等等。我们可以用一个数组来记录一个机枪兵剩余的血和杀敌数量,因为这对于每个机枪兵是独立的。但攻击力比较麻烦,因为经过升级,攻击力会增加,这就必须要找出所有表示机枪兵的数组,然后进行修改,非常麻烦。从这里我们可以看出一件事情,首先每个机枪兵有独立的数据需要记录和修改,比如剩余的血。同时他们有相同的数据需要共用,比如攻击力。这时候面向对象就能帮上我们的忙了。

  1.1、类的定义

  我们先来处理一部分问题,也就是每个机枪兵独有的数据。

class marine {    public $blood = 50; //剩余的血    public $kills = 0; //杀敌数量    //这个函数(通常叫做方法)表示攻击敌人时候的运行代码    function attack($enemy)    {    //攻击敌人的代码    } }

  这叫做类,我们建立了一个表示所有机枪兵的类marine,这里面保留了需要每个兵独有的数据,比如上面代码里的剩余的血。

  1.2、对象的创建和使用

  接下来我们来使用对象,也就是每个机枪兵:

$m1 = new marine();

  通过new后面加一个类的名字和括号,我们新建了一个机枪兵$m1,$m1被叫做类marine的对象,我们可以把它想象成一个特殊变量,只不过里面保存了多个数据。如果需要使用或者操作某个机枪兵的血(对象的属性),只要用$m1->blood来表示就可以了:

echo $m1->blood;//输出机枪兵$m1剩余的血

  我们再建立一个机枪兵

$m2 = new marine();

  如果此时$m1被敌人攻击过了,还剩下10个血。而$m2没受过攻击:

echo $m1->blood;//结果是10 echo $m2->blood;//结果是50

  使用对象可以很简单的保存每个机枪兵的血,不会互相影响。如果机枪兵$m1攻击敌人的时候,可以这样使用对象的方法:

$m1->attack($z1);//假设攻击的是某个小狗的对象$z1

  不同的类内可以用同名的函数,比如小狗的类Zergling里面也可以有一个函数attack。要注意的是,从PHP5开始,无论在哪里改变一个对象的属性,都能改变它。比如上面一个小狗对象被作为参数传入机枪兵的attack函数,执行函数之后这个小狗对象的血减少了,这和一般的函数不同。但这是很直观的,如果一个小狗被攻击了,它的血就应该减少。


更多内容请点击左下角“阅读原文”

 
IT技术博客大学习 更多文章 Linux进程管理命令详解(ps和top) MySQL服务启动脚本完全解析 服务器集群架构的设计与选择 合理使用MySQL的Limit进行分页 相似度计算常用方法综述
猜您喜欢 阮一峰:HTTP 协议入门 Python调用百度API 独立博客进阶技巧 对待一些问题的看法 致所有创业者——YC史上最全面教科书