php教程 PHP开发 星际争霸之php面向对象(一)

星际争霸之php面向对象(一)

Jun 07, 2016 pm 05:23 PM
BLOOD nbsp php

题记

这是一部学习php设计模式的专集,作者以经典的游戏-星际争霸洋洋洒洒地讨论PHP面向对象和php的设计模式,内容比较全面,网志博客觉得它称得上一部学习php设计模式的经典之作,本来网志博客还打算以网页游戏武林三国来写一个php设计模式专辑的,但看到星际争霸的php设计模式后,我打消了这个念头了。


本php设计模式专辑来源于博客(jymoz.com),不过后来博客被封(2012年)了,又因为作者jymoz没有备份,以致先前很多原创博文包括我接下来要分享的php设计模式专集都消失了,幸好两年前我收藏了作者php设计模式的全部博文,感谢作者jymoz的辛苦付出哦!


==============================================================================


前言


面向对象博大精深,对于从未接触过得的人,会觉得一头雾水。


学习的资料很多,但大多比较抽象,所以我用经典的游戏-星际争霸来讨论PHP面向对象。


现在假设我们来用PHP开发星际争霸,从而接触PHP面向对象。


注意,为了便于学习,除了特殊说明,否则各部分代码之间没有关联。而且同一件事情往往用的是不同的代码。


另外我也不去考证各个兵种的属性数字,仅仅用来说明。


一、类和对象


如果玩家制造了一个机枪兵,那么我们怎么表示他呢,因为每个机枪兵有几个基本的数据要记录:剩余的血,杀敌数量,攻击力等等。


我们可以用一个数组来记录一个机枪兵剩余的血和杀敌数量,因为这对于每个机枪兵是独立的。


但攻击力比较麻烦,因为经过升级,攻击力会增加,这就必须要找出所有表示机枪兵的数组,然后进行修改,非常麻烦。


从这里我们可以看出一件事情,首先每个机枪兵有独立的数据需要记录和修改,比如剩余的血。同时他们有相同的数据需要共用,比如攻击力。


这时候面向对象就能帮上我们的忙了。

1.1、类的定义


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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

class marine

 

{

 

   public $blood = 50; //剩余的血

 

   public $kills = 0; //杀敌数量

 

   //这个函数(通常叫做方法)表示攻击敌人时候的运行代码

   function attack($enemy)

 

   {

 

   //攻击敌人的代码

 

   }

 

}

로그인 후 복사

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


1.2、对象的创建和使用


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

1

$m1 = new marine();

로그인 후 복사

通过new后面加一个类的名字和括号,我们新建了一个机枪兵$m1,$m1被叫做类marine的对象,我们可以把它想象成一个特殊变量,只不过里面保存了多个数据。


如果需要使用或者操作某个机枪兵的血(对象的属性),只要用$m1->blood来表示就可以了:

1

2

3

4

5

6

7

8

9

10

11

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

 

我们再建立一个机枪兵

 

$m2 = new marine();

 

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

 

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

 

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

로그인 후 복사

使用对象可以很简单的保存每个机枪兵的血,不会互相影响。


如果机枪兵$m1攻击敌人的时候,可以这样使用对象的方法:

1

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

로그인 후 복사

不同的类内可以用同名的函数,比如小狗的类Zergling里面也可以有一个函数attack


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


 二、构造函数和析构函数


每次我们新建一个机枪兵的时候,总人口应该加1,如果一个机枪兵被杀,人口应该减少1。


可以通过构造函数和析构函数来自动处理:

1

2

3

4

5

6

class marine

 

{

 

   //构造函数

   function 

로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP 빠른 가이드

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

See all articles