用星际快速入门PHP面向对象编程.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用星际快速入门PHP面向对象编程

用星际快速入门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函数,执行函数之后这个小狗对象的血减少了,这和一般的函数不同。但这是很直观的,如果一个小狗被攻击了,它的血就应该减少。 ?二、构造函数和析构函数 每次我们新建一个机枪兵的时候,总人口应该加1,如果一个机枪兵被杀,人口应该减少1。可以通过构造函数和析构函数来自动处理: class marine { ???//构造函数 ???function __construct() ???{ ???//增加总人口的代码 ???} ???//析构函数 ???function __destruct() ???{ ???//减少总人口的代码 ???} } 在一个类中,名字为__construct的函数叫做构造函数,每次new新建一个类的对象的时候就会执行: $m1 = new marine();//每次制造一个机枪兵时系统会调用类marine的构造函数,自动增加总人口 在一个类中,名字为__destruct的函数叫做析构函数,每次销毁一个类的对象的时候就会执行: unset($m1);//unset可以用于对象,表示销毁一个对象。每次一个机枪兵被杀时系统会调用类marine的析构函数,自动减少总人口 ?三、静态 机枪兵的攻击力是属于所有机枪兵对象,每个机枪兵的攻击力都是一样的,如果升级,应该一起变化。这就用到static,表示静态: class marine { static $attackNumber = 10;//攻击力的数字 ???//这个函数表示攻击敌人时候的运行代码 ???function attack($enemy) ???{ ???//攻击敌人的代码,$enemy-blood表示敌人对象的血属性 ??$enemy-blood -= self::$attackNumber; ???} } 静态属性表示类所有的对象都共享的属性,一旦改变,所有的对象都跟着变化。 静态属性用static开头,比如上面的static $attackNumber。静态属性可以用类直接访问:echo marine::$attackNumber;//显示10 如果类以内的函数访问,用self::$attackNumber表示本类的$attackNumber属性所以如果我们升级了机枪兵的攻击力,所有的机枪兵都受影响,这就是面向对象的好处之一,也解决

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档