백엔드 개발 PHP 튜토리얼 PHP에서 this, self 및 parent 키워드의 차이점과 사용법에 대한 자세한 설명

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

Jul 08, 2017 am 10:15 AM
parent self this

{一}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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

e의 NameResolutionError(self.host, self, e) 이유와 해결 방법 e의 NameResolutionError(self.host, self, e) 이유와 해결 방법 Mar 01, 2024 pm 01:20 PM

오류의 원인은 urllib3 라이브러리의 예외 유형인 NameResolutionError(self.host,self,e)frome입니다. 이 오류의 원인은 DNS 확인에 실패했기 때문입니다. 해결을 찾을 수 없습니다. 이는 입력한 URL 주소가 정확하지 않거나 DNS 서버를 일시적으로 사용할 수 없기 때문에 발생할 수 있습니다. 이 오류를 해결하는 방법 이 오류를 해결하는 방법은 여러 가지가 있습니다. 입력한 URL 주소가 올바른지 확인하고 액세스할 수 있는지 확인하십시오. DNS 서버를 사용할 수 있는지 확인하십시오. 명령줄에서 "ping" 명령을 사용해 볼 수 있습니다. DNS 서버를 사용할 수 있는지 테스트하려면 프록시 뒤에 있는 경우 호스트 이름 대신 IP 주소를 사용하여 웹사이트에 액세스해 보세요.

Python에서 self를 사용하는 방법 Python에서 self를 사용하는 방법 May 17, 2023 pm 10:40 PM

Python에서 self의 사용법을 소개하기 전에 먼저 Python의 클래스와 인스턴스를 소개하겠습니다. 객체 지향의 가장 중요한 개념은 클래스와 인스턴스입니다. Student 클래스로 표현됩니다. 인스턴스는 클래스를 기반으로 생성된 특정 "객체"입니다. 각 객체는 클래스에서 동일한 메서드를 상속하지만 해당 데이터는 다를 수 있습니다. 1. Student 클래스를 예로 들어 보겠습니다. Python에서 클래스는 다음과 같이 정의됩니다. classStudent(object):pass(Object)는 클래스가 상속받는 클래스를 나타냅니다.

Vue2가 이를 통해 다양한 옵션의 속성에 접근할 수 있는 이유에 대해 이야기해보겠습니다. Vue2가 이를 통해 다양한 옵션의 속성에 접근할 수 있는 이유에 대해 이야기해보겠습니다. Dec 08, 2022 pm 08:22 PM

이 글은 Vue 소스 코드를 해석하는 데 도움이 될 것이며 이를 사용하여 Vue2의 다양한 옵션에서 속성에 액세스할 수 있는 이유를 소개하는 것이 모든 사람에게 도움이 되기를 바랍니다!

Python에서 상위 클래스 속성에 액세스하는 방법은 무엇입니까? Python에서 상위 클래스 속성에 액세스하는 방법은 무엇입니까? Aug 26, 2023 am 10:17 AM

객체 지향 프로그래밍에서 상속을 사용하면 기존 클래스의 속성과 메서드를 상속하는 새 클래스를 만들 수 있습니다. 이 강력한 개념은 프로그램의 코드 재사용, 모듈성 및 확장성을 가능하게 합니다. 상위 클래스 속성에 액세스하기 전에 먼저 살펴보겠습니다.

이 점을 이해하고 프론트엔드 70%를 따라잡는 글 이 점을 이해하고 프론트엔드 70%를 따라잡는 글 Sep 06, 2022 pm 05:03 PM

Vue2의 이 포인팅 문제로 인해 동료가 버그로 인해 화살표 기능이 사용되어 해당 소품을 얻을 수 없게 되었습니다. 제가 그에게 소개했을 때 그는 그것을 몰랐고, 그래서 저는 일부러 프론트엔드 커뮤니케이션 그룹을 살펴보았습니다. 지금까지 적어도 70%의 프론트엔드 프로그래머들은 오늘 그것을 이해하지 못하고 있습니다. 모든 것이 불분명하다면 이 링크를 아직 배우지 않았다면 큰 소리로 말해주세요.

jQuery에서 이 키워드를 사용하는 영리한 방법 jQuery에서 이 키워드를 사용하는 영리한 방법 Feb 25, 2024 pm 04:09 PM

jQuery에서 this 키워드의 유연한 사용 jQuery에서 this 키워드는 현재 조작 중인 DOM 요소를 참조하는 데 사용되는 매우 중요하고 유연한 개념입니다. 이 키워드를 합리적으로 사용함으로써 페이지의 요소를 쉽게 조작하고 다양한 인터랙티브 효과와 기능을 얻을 수 있습니다. 이 기사에서는 특정 코드 예제를 결합하여 jQuery에서 이 키워드를 유연하게 사용하는 방법을 소개합니다. 간단한 이 예 먼저 간단한 이 예를 살펴보겠습니다. 우리가

이게 뭔가요? JavaScript에서 이에 대한 심층 분석 이게 뭔가요? JavaScript에서 이에 대한 심층 분석 Aug 04, 2022 pm 05:02 PM

이게 뭔가요? 다음 기사에서는 JavaScript에서 이에 대해 소개하고 다양한 함수 호출 방법의 차이점에 대해 설명하겠습니다. 도움이 되기를 바랍니다.

JavaScript는 이 포인터를 어떻게 변경합니까? 세 가지 방법에 대한 간략한 분석 JavaScript는 이 포인터를 어떻게 변경합니까? 세 가지 방법에 대한 간략한 분석 Sep 19, 2022 am 09:57 AM

JavaScript는 이 포인터를 어떻게 변경합니까? 다음 기사에서는 JS에서 이 포인터를 변경하는 세 가지 방법을 소개합니다. 이것이 도움이 되기를 바랍니다.

See all articles