PHP는 5부터 대부분의 객체 지향 언어 기능을 갖추고 있습니다. PHP4보다 더 많은 객체 지향 기능을 가지고 있습니다. 여기서는 문자 그대로 이해하기 쉬운 this, self, parent라는 세 가지 키워드를 주로 설명합니다. this, me, father 먼저 몇 가지 개념을 정립해 보겠습니다. 이 세 가지 키워드는 어디에 사용됩니까? 이것이 현재 객체에 대한 포인터임을 간단히 설명하겠습니다(C에서 포인터를 사용하여 살펴보겠습니다. (bar), self) 현재 클래스에 대한 포인터이고 parent는 상위 클래스에 대한 포인터입니다.
다음은 예제를 통해 설명됩니다.
(1) this
<?php class UserName { //定义属性 private $name; //定义构造函数 function construct( $name ){ $this->name = $name; //这里已经使用了this指针 } //析构函数 function destruct(){} //打印用户名成员函数 function printName(){ print( $this->name ); //又使用了this指针 } } //实例化对象 $nameObject = new UserName( "heiyeluren" ); //执行打印 $nameObject->printName(); //输出: heiyeluren //第二次实例化对象 $nameObject2 = new UserName( "PHP5" ); //执行打印 $nameObject2->printName(); //输出:PHP5 ?>
위 클래스가 각각 11번째 줄과 20번째 줄에서 이 포인터를 사용하는 것을 볼 수 있는데, 이 포인터는 그 시점에 누구를 가리키는 것일까요? 실제로 이는 인스턴스화할 때 가리키는 사람을 결정합니다. 예를 들어 개체가 처음으로 인스턴스화되면(라인 25) $nameObject 개체를 가리킵니다. print($this->82831b9fd6a5c8a9512cc660e684eb6ename)이 되며, 물론 "heiyeluren"이 출력됩니다. 두 번째 경우 print( $this->name )는 print( $nameObject2->name )가 되므로 "PHP5"가 출력됩니다. 따라서 이는 현재 개체 인스턴스에 대한 포인터이며 다른 개체나 클래스를 가리키지 않습니다.
(2)self
우선 self가 클래스 자체를 가리킨다는 점을 분명히 해야 합니다. 즉, self는 인스턴스화된 개체를 가리키지 않습니다. 일반적으로 self는 클래스의 정적 변수를 가리키는 데 사용됩니다. 수업.
<?php class Counter { //定义属性,包括一个静态变量 private static $firstCount = 0; private $lastCount; //构造函数 function construct(){ $this->lastCount = ++selft::$firstCount; //使用self来调用静态变量,使用self调用必须使用::(域运算符号) } //打印最次数值 function printLastCount(){ print( $this->lastCount ); } } //实例化对象 $countObject = new Counter(); $countObject->printLastCount(); //输出 1 ?>
여기서는 6행과 12행 두 곳만 주의하면 됩니다. 두 번째 줄에 정적 변수 $firstCount를 정의했고 초기 값은 0입니다. 그런 다음 12번 줄에서 이 값을 호출했습니다. self를 사용하여 호출하고 중간에 "::"을 사용하여 연결했습니다. 도메인 연산자를 호출하면 이때 호출하는 것은 클래스 자체에서 정의한 정적 변수 $frestCount입니다. 우리의 정적 변수는 다음 개체의 인스턴스와 아무 관련이 없으며 클래스에만 관련되어 있습니다. self는 클래스 자체를 가리키고 어떤 객체 인스턴스와도 아무 관련이 없기 때문에 이것을 참조에 사용할 수 없습니다. self를 사용하여 참조할 수 있습니다. 즉, 클래스에 정적 멤버가 있는 경우 self를 사용하여 해당 멤버를 호출해야 합니다.
(3)parent
부모는 부모 클래스에 대한 포인터라는 것을 알고 있습니다. 일반적으로 부모 클래스의 생성자를 호출하는 데 사용됩니다.
<?php //基类 class Animal { //基类的属性 public $name; //名字 //基类的构造函数 public function construct( $name ){ $this->name = $name; } } //派生类 class Person extends Animal //Person类继承了Animal类 { public $personSex; //性别 public $personAge; //年龄 //继承类的构造函数 function construct( $personSex, $personAge ){ parent::construct( "heiyeluren" ); //使用parent调用了父类的构造函数 $this->personSex = $personSex; $this->personAge = $personAge; } function printPerson(){ print( $this->name. " is " .$this->personSex. ",this year " .$this->personAge ); } } //实例化Person对象 $personObject = new Person( "male", "21"); //执行打印 $personObject->printPerson(); //输出:heiyeluren is male,this year 21 ?>
우리는 다음 세부 사항에 주의합니다: 멤버 속성은 모두 공개되며, 특히 상위 클래스의 속성은 상속된 클래스가 이를 통해 액세스할 수 있습니다. 25행의 핵심 사항에 주목합니다. parent::construct( "heiyeluren" ) 이때 부모 클래스의 멤버는 다음과 같기 때문에 부모 클래스의 생성자를 호출하여 부모 클래스를 초기화합니다. 따라서 이를 직접 사용하여 상속된 클래스를 호출할 수 있습니다.