>  기사  >  백엔드 개발  >  PHP를 외우면서 배우세요 -(12) 객체지향 프로그래밍 2

PHP를 외우면서 배우세요 -(12) 객체지향 프로그래밍 2

WBOY
WBOY원래의
2016-08-08 09:32:30812검색

이번 글과 이전 글 사이에 약간의 공백이 있어 중간에 작은 프로젝트가 삽입되었습니다. 하지만 상관없습니다. "PHP를 외우면서 배우기"는 계속됩니다.

PHP 객체 지향 프로그래밍

(2) 클래스 속성

소위 클래스 속성은 클래스에 선언된 변수입니다. 클래스 외부에 선언된 변수와 차이점은 수정된 권한이 앞에 추가된다는 점입니다. 이는 이전 글에서 public/private/protected 였습니다. 예를 들어, 학생의 학번, 이름, 성별, 나이, 반 등이 포함된 학생 클래스를 선언하고 싶습니다. 그러면 다음과 같이 선언할 수 있습니다.

<?php
class Student{
	private $sid;
	private $name;
	private $gender;
	private $age;
	private $grade;

	public getSid(){
		return $this->sid;
	}
	public getName(){
		return $this->name;
	}
	public getGender(){
		return $this->gender;
	}
	public getAge(){
		return $this->age;
	}
	public getGrade(){
		return $this->grade;
	}

	public setSid($sid){
		$this->sid = $sid;
	}
	public setName($name){
		$this->name = $name;
	}
	public setGender($gender){
		$this->gender = $gender;
	}
	public setAge($age){
		$this->age = $age;
	}
	public setGrade($grade){
		$this->grade = $grade;
	}

}

위의 학생 클래스에서 5개의 속성을 선언했는데 모두 private 유형으로 선언되었습니다. 클래스 외부에서는 직접 액세스할 수 없으므로 각 속성에 액세스하고 값을 설정하는 두 가지 메서드를 제공합니다. 일반적으로 클래스를 선언할 때 속성은 private으로, 멤버 메서드는 public으로 선언하므로 외부 세계에서는 public 메서드를 통해 private 속성에 접근할 수 있습니다. 그리고 접근 및 설정 방법을 선언할 때 일반적으로 getXXX() 및 setXXX() 형식이 사용됩니다. XXX의 첫 글자는 일반적으로 대문자입니다. 물론 공용 속성으로 선언할 수도 있으므로 직접 값을 할당하고 클래스 외부에서 액세스할 수 있습니다. 그러나 향후 표준화될 경우 각 클래스는 이 클래스를 구체적으로 저장하기 위해 별도의 PHP 파일로 유지되므로 이를 비공개 속성으로 선언하는 것이 좋습니다. 이 클래스의 객체는 마음대로 변경되지 않으므로 보안이 보장됩니다.

속성을 선언할 때 extra-class 변수처럼 선언하면서 값을 할당할 수도 있습니다.

참고:

속성은 값, 배열 또는 심지어 값을 저장할 수 있습니다. 다른 클래스의 개체입니다. 예를 들어, 위의 학생 클래스에 학교 속성을 추가하세요. 이 학교도 학교 이름, 주소 등을 포함하는 클래스입니다. 먼저 학교 클래스를 선언합니다

class School{
	private $name;
	private $address;

	public getName(){
		return $this->name;
	}
	public getAddress(){
		return $this->address;
	}
	public setName($name){
		$this->name = $name;
	}
	public setAddress($address){
		$this->address = $address;
	}
}
그런 다음 다음과 같이 학생 클래스에 학교 속성을 추가할 수 있습니다.

<?php
class Student{
	...
	private $school;

	...
	public getSchool(){
		return $this->school;
	}

	...
	public setSchool($school){
		$this->school = $school;
	}

}
이렇게 는 다른 속성과 동일해 보이지만 값을 할당하고 매개변수를 전달할 때 객체 전달에 주의하세요. . 예:

먼저 학교를 선언하겠습니다.

<span style="white-space:pre">	</span>$school1 = new School();
<span style="white-space:pre">	</span>$school1->setName("大连理工大学");
<span style="white-space:pre">	</span>$school1->setAddress("大连");
<span style="white-space:pre">	</span>$stu1 = new Student();
<span style="white-space:pre">	</span>$stu1->setSchool($school1);
좋아요 이그 학교를 방문하면 객체가 됩니다. 이 학생이 다니는 학교 이름을 알고 싶으면 다음과 같이 방문해야 합니다.

<span style="white-space:pre">	</span>$stu1->getSchool()->getName();
getSchool 메소드를 사용하여 School 객체를 가져온 다음 School 객체에서 getName 메소드를 사용하여 해당 이름에 액세스합니다.

여기서는 클래스 내 변수에 접근할 때 $this 키워드를 사용하므로 다음은 this 키워드에 대해 이야기해보겠습니다.

(3) $this 키워드

public, private 또는 protected 멤버 변수로 선언하든, 클래스의 자체 변수에 액세스할 수 있어야 하므로 $this 키워드를 사용해야 합니다. 제 생각에는 $this 키워드는 클래스 자체를 참조하여 자체 속성을 호출하는 객체로 취급하는 것으로 이해할 수도 있습니다. 여기서는 변수를 선언할 때 $ 기호를 사용하지만 $this를 사용하여 액세스하는 경우 $ 기호만 추가하고 후속 속성을 추가하지 마십시오. 그렇지 않으면 오류가 보고됩니다. 구체적인 사용법은 위의 코드를 참조하세요. 물론 외부에 선언된 객체를 호출하면 $this와 동일하며 객체에 $ 기호를 추가해야 하지만 나중에는 추가하지 않습니다.

(4) 정적 속성

정적 속성을 어떻게 설명해야 할지 생각이 나지 않았는데, saw 책의 다음 문장은 이를 매우 잘 표현합니다. 정적 속성은 종종 특정 클래스와 관련되고 인스턴스 객체와는 아무 관련이 없는 지속적인 값을 나타내는 데 사용됩니다. 정적 속성을 피곤한 전역 변수로 생각할 수 있습니다. 정적 속성의 중요한 기능은 정적 속성에 액세스할 때 클래스의 인스턴스를 만들 필요가 없다는 것입니다. 즉, 클래스의 개체를 정의할 필요가 없습니다.

이 책은 자동차 카테고리에서 판매 수량의 정적 속성에 대한 예를 제공합니다. 어쨌든 팔리면 내 판매 수량은 1 증가합니다. 그러나 나는 이미 학생과 학교의 예를 들었고 계속해서 학교 졸업생의 속성을 생각한다고 말할 것입니다. 그러면 학교 졸업생이 1명 더 생길 것입니다. 그런 다음 다음과 같이 선언할 수 있습니다.

<span style="white-space:pre">	</span>public static $graduate;
즉, 변수 앞에 static 키워드를 추가합니다. 그러면 이 정적 속성에 액세스할 때 객체를 사용하여 직접 액세스할 필요가 없습니다. School::$graduate = ...; 위에서 정의할 필요가 없는 객체에 접근할 수 있다고 말한 것입니다. 여기서 그림을 사용하여 정적 속성과 일반 속성의 차이점을 설명할 수 있습니다.

静态属性只占这个内存,不管存不存在对象实例,除非这个类没了,否则会一直占有自己的内存。而普通的属性在每次声明对象的时候都会分配内存。

静态属性一般声明成公有的。

(6)类常量

与类外的普通常量一样,类常量也是存储一个固定的值。使用const关键字进行声明,这里不需要加权限修饰。在访问的时候跟访问静态属性一样需要使用类名::(双冒号)加常量名来访问。比如如果我声明一个手机类,手机有各种型号,那么我可以把各个手机型号用常量来存储,在给手机型号属性赋值的时候使用这些常量来赋值就好了。但是可能有这种疑惑,为什么要使用常量,我直接声明不就行了。那么可以这样理解:

class Phone{
	const IPHONE = 1;
	const ZTE = 2;
	const HUAWEI = 3;

    //这里面各种属性

}
我这个是一个手机类,里面声明了三个常量,这里注意,声明常量不需要$符号,并且常量的名字一般大写。但是你注意我在里面存储的是int型的数据,如果我给手机型号赋值的时候虽然给他赋值是类似:$this->type = ZTE;但是我的型号存的是int型的数据,那么就会占内存少,如果我不适用常量$this->type = 'ZTE';这样我就存的字符串。并且使用常量可以提高编译速度。

这是我理解的常量的优点。但是我没怎么用过。

下一篇继续面向对象。

以上就介绍了边记边学PHP-(十二)面向对象编程2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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