이번 글과 이전 글 사이에 약간의 공백이 있어 중간에 작은 프로젝트가 삽입되었습니다. 하지만 상관없습니다. "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; } }
속성을 선언할 때 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();
여기서는 클래스 내 변수에 접근할 때 $this 키워드를 사용하므로 다음은 this 키워드에 대해 이야기해보겠습니다.
(3) $this 키워드
public, private 또는 protected 멤버 변수로 선언하든, 클래스의 자체 변수에 액세스할 수 있어야 하므로 $this 키워드를 사용해야 합니다. 제 생각에는 $this 키워드는 클래스 자체를 참조하여 자체 속성을 호출하는 객체로 취급하는 것으로 이해할 수도 있습니다. 여기서는 변수를 선언할 때 $ 기호를 사용하지만 $this를 사용하여 액세스하는 경우 $ 기호만 추가하고 후속 속성을 추가하지 마십시오. 그렇지 않으면 오류가 보고됩니다. 구체적인 사용법은 위의 코드를 참조하세요. 물론 외부에 선언된 객체를 호출하면 $this와 동일하며 객체에 $ 기호를 추가해야 하지만 나중에는 추가하지 않습니다.
(4) 정적 속성
정적 속성을 어떻게 설명해야 할지 생각이 나지 않았는데, saw 책의 다음 문장은 이를 매우 잘 표현합니다. 정적 속성은 종종 특정 클래스와 관련되고 인스턴스 객체와는 아무 관련이 없는 지속적인 값을 나타내는 데 사용됩니다. 정적 속성을 피곤한 전역 변수로 생각할 수 있습니다. 정적 속성의 중요한 기능은 정적 속성에 액세스할 때 클래스의 인스턴스를 만들 필요가 없다는 것입니다. 즉, 클래스의 개체를 정의할 필요가 없습니다.
이 책은 자동차 카테고리에서 판매 수량의 정적 속성에 대한 예를 제공합니다. 어쨌든 팔리면 내 판매 수량은 1 증가합니다. 그러나 나는 이미 학생과 학교의 예를 들었고 계속해서 학교 졸업생의 속성을 생각한다고 말할 것입니다. 그러면 학교 졸업생이 1명 더 생길 것입니다. 그런 다음 다음과 같이 선언할 수 있습니다.
<span style="white-space:pre"> </span>public static $graduate;
静态属性只占这个内存,不管存不存在对象实例,除非这个类没了,否则会一直占有自己的内存。而普通的属性在每次声明对象的时候都会分配内存。
静态属性一般声明成公有的。
(6)类常量
与类外的普通常量一样,类常量也是存储一个固定的值。使用const关键字进行声明,这里不需要加权限修饰。在访问的时候跟访问静态属性一样需要使用类名::(双冒号)加常量名来访问。比如如果我声明一个手机类,手机有各种型号,那么我可以把各个手机型号用常量来存储,在给手机型号属性赋值的时候使用这些常量来赋值就好了。但是可能有这种疑惑,为什么要使用常量,我直接声明不就行了。那么可以这样理解:
class Phone{ const IPHONE = 1; const ZTE = 2; const HUAWEI = 3; //这里面各种属性 }
这是我理解的常量的优点。但是我没怎么用过。
下一篇继续面向对象。
以上就介绍了边记边学PHP-(十二)面向对象编程2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。