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->
(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" ) 이때 부모 클래스의 멤버는 다음과 같기 때문에 부모 클래스의 생성자를 호출하여 부모 클래스를 초기화합니다. 따라서 이를 직접 사용하여 상속된 클래스를 호출할 수 있습니다.