php 대상 을 대상 으로 하 는 기초 상세 설명[스타 크 래 프 트 게임 사례]
11336 단어 php대상 을 향 하 다
머리말
대상 을 향 해 넓 고 심오 하 며 한 번 도 접 해 본 적 이 없 는 사람 에 게 는 안개 가 느껴 진다.
학습 자 료 는 많 지만 대부분 추상 적 이기 때문에 저 는 전형 적 인 게임-스타 크 래 프 트 로 PHP 대상 을 토론 합 니 다.
지금 은 우리 가 PHP 로 스타 크 래 프 트 를 개발 하여 PHP 를 대상 으로 한다 고 가정 합 니 다.
학습 에 편리 하도록 특수 설명 을 제외 하고 각 부분 코드 간 에는 관련 이 없습니다.그리고 같은 일 은 종종 다른 코드 를 사용한다.
그리고 나 도 각 병종 의 속성 숫자 를 고증 하지 않 고 설명 만 한다.
클래스 와 대상
만약 에 게이머 가 기관총 병 을 만 들 었 다 면 우 리 는 그 를 어떻게 표시 합 니까?왜냐하면 모든 기관총 병 은 몇 가지 기본 적 인 데 이 터 를 기록 해 야 하기 때 문 입 니 다.남 은 피,적 을 죽 이 는 수량,공 격 력 등 이 있 습 니 다.
우 리 는 하나의 수조 로 한 기관총 병 의 남 은 피 와 적 을 죽 이 는 수량 을 기록 할 수 있다.왜냐하면 이것 은 모든 기관총 병 에 게 독립 적 이기 때문이다.
하지만 공 격 력 이 까다 롭 습 니 다.업 그 레이 드 를 통 해 공 격 력 이 증가 하기 때문에 기관총 병 을 나타 내 는 모든 수 조 를 찾 아 수정 해 야 합 니 다.귀 찮 습 니 다.
여기 서 우 리 는 먼저 모든 기관총 병 이 독립 된 데 이 터 를 기록 하고 수정 해 야 한 다 는 것 을 알 수 있다.예 를 들 어 남 은 피 등 이다.동시에 그들 은 공 격 력 같은 데 이 터 를 공유 해 야 한다.
이 럴 때 상 대 를 향 해 우 리 를 도 울 수 있 을 거 야.
1.1 클래스 의 정의
우 리 는 먼저 일부 문 제 를 처리 하 는데,즉 모든 기관총 병 만 의 데이터 이다.
<?php
class marine
{
public $blood = 50; //
public $kills = 0; //
// ( )
function attack($enemy)
{
//
}
}
?>
이것 은 클래스 라 고 합 니 다.우 리 는 모든 기관총 병 을 나타 내 는 클래스 마리 인 을 만 들 었 습 니 다.이 안 에는 모든 병사 만 의 데이터 가 필요 합 니 다.예 를 들 어 위의 코드 에 남 은 피 등 이 있 습 니 다.1.2 대상 의 생 성과 사용
다음은 우리 가 사용 할 대상,즉 모든 기관총 병 이다.
<?php
$m1 = new marine();
?>
new 뒤에 클래스 이름과 괄호 를 추가 합 니 다.우 리 는 기관총 병$m1,$m1 을 클래스 marine 의 대상 이 라 고 부 릅 니 다.우 리 는 그것 을 특수 변수 로 상상 할 수 있 습 니 다.단지 여러 개의 데 이 터 를 저장 하고 있 을 뿐 입 니 다.어떤 기관총 병 의 피(대상 의 속성)를 사용 하거나 조작 해 야 한다 면$m1->blood 로 표시 하면 된다.echo$m1->blood;/기관총 병$m1 남 은 피 출력
우 리 는 기관총 병 을 하나 더 세 웠 다.
<?php
$m2 = new marine();
?>
이때$m1 이 적 에 게 공격 당 하면 10 개의 피 가 남 습 니 다.$m2 는 공격 을 받 지 않 았 습 니 다:
<?php
echo $m1->blood;// 10
echo $m2->blood;// 50
?>
사용 대상 은 각 기관총 병 의 피 를 간단하게 보존 할 수 있어 서로 영향 을 주지 않 는 다.만약 기관총 병$m1 이 적 을 공격 할 때,이렇게 대상 을 사용 할 수 있 는 방법:
<?php
$m1->attack($z1);// $z1
?>
서로 다른 클래스 에 서 는 같은 이름 의 함 수 를 사용 할 수 있 습 니 다.예 를 들 어 강아지 류 Zergling 에 도 함수 attack 이 있 을 수 있 습 니 다.주의해 야 할 것 은 PHP 5 부터 대상 의 속성 을 어디서 바 꾸 든 지 바 꿀 수 있다 는 것 이다.예 를 들 어 위의 강아지 대상 이 매개 변수 로 기관총 병 의 attack 함수 에 전달 되 었 고 함 수 를 실행 한 후에 이 강아지 대상 의 피 가 감소 했다.이것 은 일반적인 함수 와 다르다.하지만 강아지 가 공격 을 받 으 면 피 가 줄 어야 한 다 는 것 은 직관 적 이다.
2.구조 함수 와 분석 함수
우리 가 기관총 병 을 새로 만 들 때마다 총 인 구 는 1 을 더 해 야 한다.만약 기관총 병 이 살해당 한다 면 인 구 는 1 을 줄 여야 한다.
구조 함수 와 분석 함 수 를 통 해 자동 으로 처리 할 수 있 습 니 다.
<?php
class marine
{
//
function __construct()
{
//
}
//
function __destruct()
{
//
}
}
?>
한 클래스 에서 이름 은construct 의 함 수 는 구조 함수 라 고 합 니 다.new 가 클래스 의 대상 을 새로 만 들 때마다 실 행 됩 니 다.
<?php
$m1 = new marine();// marine ,
?>
한 클래스 에서 이름 은destruct 의 함 수 는 석조 함수 라 고 하 는데,클래스 의 대상 을 없 앨 때마다 실 행 됩 니 다:
<?php
unset($m1);//unset , 。 marine ,
?>
정적기관총 병 의 공 격 력 은 모든 기관총 병 의 대상 에 속 하 며,각 기관총 병 의 공 격 력 은 동일 하 므 로,진급 하면 함께 변화 해 야 한다.
이것 은 static 를 사용 하여 정적 을 표시 합 니 다.
<?php
class marine
{
static $attackNumber = 10; //
//
function attack($enemy)
{
// ,$enemy->blood
$enemy->blood -= self::$attackNumber;
}
}
?>
정적 속성 은 클래스 의 모든 대상 이 공유 하 는 속성 을 나타 내 고 바 뀌 면 모든 대상 이 달라 집 니 다.정적 속성 은 static 로 시작 합 니 다.예 를 들 어 위의 static$attackNumber 입 니 다.
정적 속성 은 클래스 로 직접 접근 할 수 있 습 니 다:
<?php
echo marine::$attackNumber;// 10
?>
클래스 내의 함수 에 접근 하면 self::$attackNumber 로 이 클래스 의$attackNumber 속성 을 표시 합 니 다.그래서 만약 에 우리 가 기관총 병 의 공 격 력 을 업그레이드 하면 모든 기관총 병 이 영향 을 받는다.이것 이 바로 대상 을 대상 으로 하 는 장점 중 하나 이 고 우리 가 앞에서 토론 한 공동 데이터 문 제 를 해결 했다.
함수 도 정적 일 수 있 습 니 다.이렇게 하면 클래스 로 직접 접근 할 수 있 습 니 다.새 대상 으로 호출 할 필요 가 없습니다.
<?php
class marine
{
static $attackNumber = 10; //
//
staticfunction upgrade()
{
self::$attacknum++;
}
}
?>
만약 에 과학 기술 건축 의 업그레이드 가 끝나 면 이 함 수 를 직접 호출 합 니 다.
<?php
marine::upgrade();
?>
상속병영 은 기관총 병 을 만 드 는 데 쓰 이 고 탱크 방 은 탱크 를 만 드 는 데 쓰 인 다.그들 은 모두 건축 이지 만 많은 차이 가 있다.만약 에 하나의'건축'으로 표시 하면 매우 어렵다.
그러나 우 리 는 그들의 공통점 을 유지 해 야 한다.예 를 들 어 모두 비행 할 수 있 고 비행 하 는 코드 가 여러 가지 유형 에서 중복 되 는 것 을 원 하지 않 으 며 그들 로 하여 금 각자 독립 적 으로 다른 것 을 생산 하 게 해 야 한다.
그래서 우 리 는 상속 으로 처리 할 수 있다.상속 은 부자 관 계 를 나타 내 고 상 속 된 것 을 부류 라 고 부 르 며 상 속 된 것 을 부류 라 고 부른다.계승
<?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 명의 아 이 를 가 질 수 있 습 니 다!
5.액세스 제어
$attackNumber=10 으로 속성 을 표시 하면 시스템 은 기본적으로 Public$attackNumber=10 이 므 로 이렇게 쓰 는 것 을 권장 합 니 다.
<?php
class marine
{
public static $attackNumber = 10; //
}
?>
Public 는 이 속성 이 공공 적 이 고 어디서 든 접근 하고 조작 할 수 있다 는 것 을 나타 낸다.그러나 이것 은 문제 가 있 습 니 다.만약 에 게이머 들 이 마리 네 와 같은 코드 구 조 를 알 게 된다 면 그 는 간단 한 패 치 프로그램 을 만들어 서 실행 할 때 불 러 옵 니 다.
<?php
//
marine::$attackNumber = 10000;
?>
그렇다면 그의 기관총 병 은 10000 의 공 격 력 을 가지 고 있다.하하,그렇다면 누가 그 를 이 길 수 있 겠 는가!이 속성 은 클래스 의 함수 만 접근 할 수 있 음 을 private 로 표시 합 니 다.
<?php
class marine
{
private static $attackNumber = 10; //
//
function upgrade()
{
//
if(self::$attacknum<13)
{
self::$attacknum++;
}
}
}
?>
이렇게 되면 업 그 레이 드 를 해야만 기관총 병 의 공 격 력 을 바 꿀 수 있다.그러나 지금 은 팀 개발 이 고 사용 되 는 계승 이 많 습 니 다.private 라면 하위 클래스 는 방문 할 수 없 지만 어떤 속성 을 마음대로 수정 하 는 것 을 원 하지 않 습 니 다.
그러면 proctected,proctected 의 속성 으로 하위 클래스 의 함수 에 접근 할 수 있 습 니 다.
6.무 거 운 짐
6.1 속성 리 셋
만약 우리 가 지상 부 대 를 하나의 유형 으로 삼 아 기관총 병 류 로 그 를 계승 하 게 한다 면,이때 지상 부대 류 와 기관총 병 류 에서 공 격 력$attack Number 를 정의 한다 면,모든 병 의 공 격 력 은 지상 부대 가 아니 라 기관총 병 류 에 의 해 결정 된다.무 거 운 짐 이 라 고 합 니 다.
<?php
//
class groundArmy
{
public $attackNumber = 5;
}
//
class marine extends groundArmy
{
public $attackNumber = 10; //
}
$m1 = new marine();//
echo $m1->attackNumber;// 10
?>
6.2 함수 과부하다시 불 러 오 는 것 도 함수 에 사용 할 수 있 습 니 다.하위 클래스 의 함수 가 부모 클래스 함수 와 같 으 면 따로 설명 하지 않 으 면 하위 클래스 의 대상 은 기본적으로 하위 클래스 의 함 수 를 호출 합 니 다.
예 를 들 어 인간 종족 의 귀 병 류 고 스 트 와 신 족 류 의 어두 운 성당 류(은 도)는 모두 스텔스 병종 이지 만 귀 병 이 스텔스 할 때 에 너 지 를 감소 시 키 고 어둠 의 성당 은 에너지 속성 이 전혀 없다.
만약 에 우리 가 스텔스 능력 을 부류 로 한다 면 귀 병 류 고 스 트 와 신 족 류 의 어두 운 성당 류 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();
?>
인터페이스PHP 가 다 중 상속 을 허용 하지 않 으 면 문제 가 있 습 니 다.
만약 규범 적 인 처 리 를 위해 우리 가 스텔스 능력 을 하나의 유형 으로 만 든 후에 비행 능력 을 하나의 유형 으로 놓 으 면 인류의 정찰 기 는 어떻게 처리 합 니까?두 가 지 를 물 려 받 을 수 없습니다!
그럼 우 리 는 계승 하지 않 아 도 되 지만 개발 팀 의 다른 사람들 이 정찰기 에 관련 되면 긴 코드 를 한 번 읽 어야 합 니까?클래스 의 모든 방법 에 대한 간략 한 설명 을 알 수 있 습 니까?
인터페이스 interface 를 사용 할 수 있 습 니 다.한 종 류 는 여러 개의 인 터 페 이 스 를 실행 할 수 있 습 니 다.인터페이스 에서 정 의 된 함 수 는 함수 체 가 있어 서 는 안 됩 니 다.인 터 페 이 스 를 실행 하 는 종 류 는 반드시 이 함수 들 을 완전 하 게 정의 해 야 합 니 다.
이렇게 해서 우 리 는 정찰기 가 비행 능력 인 터 페 이 스 를 실현 했다 는 것 을 알 고 있다.반드시 인터페이스 에서 묘사 한 비행 방법 이 있 을 것 이다./스텔스 능력 의 인터페이스
<?php
interface concealAbility
{
public function conceal();
}
//
interface flyAbility
{
public function fly();
}
//
class Wraith implements flyAbility, concealAbility
{
//
function fly()
{
//
}
//
function conceal()
{
//
}
}
?>
8.총화우 리 는 PHP 가 대상 을 대상 으로 하 는 기본 지식 을 토론 했다.스타 크 래 프 트 라 는 전형 적 인 게임 을 통 해 대상 을 대상 으로 하 는 초보적인 역할 을 볼 수 있다.
우 리 는 대상 을 대상 으로 코드 를 더욱 선명 하 게 만 들 고 코드 를 조직 하여 비교적 편리 하 게 중복 사용 하 는 것 을 보 았 다.
또한 대상 도 변수의 충돌 을 줄 이 고 관련 데이터 의 저장 과 사용 을 편리 하 게 한다.
만약 에 해결 하고 자 하 는 문제 가 여러 가지 측면 과 관련된다 면 대상 을 대상 으로 더욱 유연 하고 기교가 있 는 방식,예 를 들 어 통상 적 으로 언급 한 디자인 모델 과 많은 구 조 를 진화 시 킬 수 있다.
물론 대상 을 대상 으로 하 는 단점 도 있 습 니 다.위의 코드 를 보면 먼저 코드 가 많 습 니 다.간단 한 임 무 는 여러 가지 유형 을 정의 하면 오히려 번 거 롭 습 니 다.
간단 한 작업 에 대해 서도 대상 을 대상 으로 코드 운행 의 효율 을 떨 어 뜨 릴 수 있다.
깊이 있 는 연 구 는 본문의 범 위 를 넘 어 섰 다.
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.