PHP에서 this, self 및 parent 키워드의 차이점과 사용법에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-13 08:18:01
원래의
1251명이 탐색했습니다.

{一}PHP에서 this, self, parent의 차이점 중 하나인 이 문서

객체 지향 프로그래밍(OOP, Object Oriented 프로그래밍)은 이제 프로그래머의 기본 기술이 되었습니다. PHP의 고급 프로그래밍에 OOP 아이디어를 사용하는 것은 PHP 프로그래밍 기능을 향상하고 웹 개발 아키텍처를 계획하는 데 매우 의미가 있습니다. 다시 작성된 후 PHP5는 OOP 지원에서 큰 도약을 이루었으며 객체 지향 언어의 기능을 대부분 갖춘 언어가 되었습니다. PHP4보다 객체 지향 기능이 더 많습니다. 여기서 제가 주로 이야기하고 있는 것은 this, self, parent 세 키워드의 차이입니다. 문자 그대로 이해하면 그들은 각각 나를, 아버지를 지칭합니다. 먼저 예비적인 설명을 하자면, 이것은 현재 객체에 대한 포인터(C에서는 포인터로 간주될 수 있음)이고, self는 현재 클래스에 대한 포인터이고, parent는 부모 클래스에 대한 포인터입니다. 이를 표현할 수 있는 더 좋은 언어가 없기 때문에 여기서 설명하기 위해 포인터를 자주 사용합니다. 포인터의 개념에 관해서는 백과사전을 참조할 수 있습니다.
실제 사례를 바탕으로 이야기해 보겠습니다.

코드는 다음과 같습니다.

<?php
  classname          //建立了一个名为name的类
 {
    private$name;         //定义属性,私有
    //定义
构造函数
,用于初始化赋值
    function construct( $name )
    {
         $this->name =$name;         //这里已经使用了this指针语句①
    }
    //
析构函数
    function destruct(){}
    //打印用户名成员函数
    function printname()
    {
         print( $this->name);             //再次使用了this指针语句②,也可以使用echo输出
    }
 }
 $obj1 = new name("PBPHome");   //实例化对象 语句③
 //执行打印
 $obj1->printname(); //输出:PBPHome
 echo"<br>";                                    //输出:回车
 //第二次实例化对象
 $obj2 = new name( "PHP" );
 //执行打印
 $obj2->printname();                         //输出:PHP
 ?>
로그인 후 복사

설명: 위 클래스는 문장 ①과 문장 ②에서 각각 이 포인터를 사용하는데, 이때 이 포인터는 누구를 가리키는 것일까요? 실제로 이는 인스턴스화될 때 개체가 누구를 가리키는지 결정합니다. 예를 들어 개체가 처음으로 인스턴스화되면(문 ③) $obj1 개체를 가리키는 것입니다. 그런 다음 문 ②의 인쇄를 실행할 때, print( $this- >name )이 되며, 물론 "PBPHome"이 출력됩니다. 두 번째 경우 print($this->name)는 print($obj2->name)이 되므로 "PHP"가 출력됩니다. 따라서 이는 현재 개체 인스턴스에 대한 포인터이며 다른 개체나 클래스를 가리키지 않습니다.
{2} PHP Part 2에서 self와 parent의 차이점 self

이 글에서는 self의 사용법을 설명하겠습니다.

우선 self가 클래스 자체를 가리킨다는 점을 분명히 해야 합니다. , self는 이미 인스턴스화된 객체를 가리키지 않으며 일반적으로 self는 클래스의 정적 변수를 가리키는 데 사용됩니다. 클래스에서 정적 멤버를 사용하는 경우(일반적으로 static 키워드 사용) self를 사용하여 호출해야 합니다. 또한 self를 사용하여 정적 변수를 호출하려면 ::(필드
연산자 번호)을 사용해야 합니다. 예를 참조하세요.

코드는 다음과 같습니다.

<?php
    classcounter     //定义一个counter的类
    {
        //定义属性,包括一个静态变量$firstCount,并赋初值0 语句①  
        private static $firstCount = 0;
        private $lastCount;
        //构造函数
        function construct()
        {
             $this->lastCount =++self::$firstCount;      //使用self来调用静态变量 语句②
        }
        //打印lastCount数值
        function printLastCount()
        {
             print( $this->lastCount );
        }
    }
  //实例化对象
  $obj = new Counter();
 $obj->printLastCount();                             //执行到这里的时候,程序输出1
 ?>
로그인 후 복사

여기서 주목해야 할 부분은 문장 ①과 문장 ②입니다. 문장 ①에서 정적 변수 $firstCount를 정의한 후, 문장 ②에서 이 값을 호출하기 위해 self를 사용했습니다. 그러면 이때 호출하는 것은 클래스 자체에서 정의한 정적 변수 $frestCount입니다. 우리의 정적 변수는 다음 개체의 인스턴스와 아무 관련이 없으며 클래스에만 관련되어 있습니다. 그런 다음 클래스 자체를 호출하면 self가 클래스 자체를 가리키고 있으므로 이를 참조하는 데 사용할 수 없습니다. 객체 인스턴스와 아무 관련이 없습니다. 그런 다음 이전에 사용된 this는 인스턴스화된 객체 $obj를 호출하므로 혼동하지 마십시오.

예문을 통해 이해하기가 더 쉽습니다. 두 번째 장의 끝입니다.

{3} PHP Part 3 parent에서 self와 parent의 차이점

이 글에서는 parent의 사용법을 설명하겠습니다.

우선, parent는 상위 클래스에 대한 포인터임을 분명히 합니다. 일반적으로 parent를 사용하여 상위 클래스의 생성자를 호출합니다. 예시는 다음과 같습니다.

코드는 다음과 같습니다.

<?php
 //建立基类Animal
 class Animal
 {
    public $name; //基类的属性,名字$name
    //基类的构造函数,初始化赋值
    public function construct( $name )
    {
         $this->name = $name;
    }
 }
 //定义派生类Person 继承自Animal类
 class Person extends Animal
 {
    public$personSex;       //对于派生类,新定义了属性$personSex性别、$personAge年龄
    public $personAge;
    //派生类的构造函数
    function construct( $personSex, $personAge )
    {
         parent::construct( "PBPHome");    //使用parent调用了父类的构造函数 语句①
         $this->personSex = $personSex;
         $this->personAge = $personAge;
    }
    //派生类的成员函数,用于打印,格式:名字 is name,age is 年龄
    function printPerson()
    {
         print( $this->name. " is ".$this->personSex. ",age is ".$this->personAge );
     }
 }
 //实例化Person对象
 $personObject = new Person( "male", "21");
 //执行打印
 $personObject->printPerson();//输出结果:PBPHome is male,age is 21
 ?>
로그인 후 복사

이것의 사용법도 포함되어 있으니 직접 분석해 보시기 바랍니다. 우리는 이 세부 사항에 주의를 기울입니다. 멤버 속성은 모두 공개(공용 속성 및 메서드, 클래스 내부 및 외부 코드에 액세스 가능), 특히 상위 클래스의 속성이 이를 통해 액세스하기 위한 것입니다. 핵심은 문장 ①: parent::construct("heiyeluren")입니다. 이때 parent를 사용하여 부모 클래스의 생성자를 호출하여 부모 클래스를 초기화합니다. 이름은 PBPHome입니다. 다른 개체 $personObject1을 인스턴스화하여 테스트할 수 있습니다. 인쇄 후에도 이름은 여전히 ​​PBPHome입니다.

요약: 이것은 인스턴스화할 때 결정되는 객체 인스턴스에 대한 포인터입니다. self는 클래스 자체에 대한 참조이며 일반적으로 클래스의 정적 변수를 가리키는 데 사용됩니다. parent는 일반적으로 parent로 사용되는 상위 클래스에 대한 참조입니다. 상위 클래스의 생성자를 호출합니다.

위 내용은 PHP에서 this, self 및 parent 키워드의 차이점과 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿