php教程 php手册 PHP中this,self,parent的区别

PHP中this,self,parent的区别

Jun 06, 2016 pm 07:55 PM
parent php self th this 차이점

{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能。利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的。 PHP5经过重写后,对OOP的支持额有了

{一}PHP中this,self,parent的区别之一this篇

      面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能。利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的。

PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性。这里我主要谈的是this,self,parent 三个关键字之间的区别。从字面上来理解,分别是指这、自己、父亲。先初步解释一下,this是指向当前对象的指针(可以看成C里面的指针),self是指向当前类的指针parent是指向父类的指针。我们这里频繁使用指针来描述,是因为没有更好的语言来表达。关于指针的概念,大家可以去参考百科。

下面我们就根据实际的例子结合来讲讲。

  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"
";                                    //输出:回车

 //第二次实例化对象
 $obj2 = new name( "PHP" );

 //执行打印
 $obj2->printname();                         //输出:PHP
 ?>
 

说明:上面的类分别在 语句①语句②使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象的时候(语句③),那么当时this就是指向$obj1对象,那么执行语句②的打印时就把print( $this->name ),那么当然就输出了"PBPHome"。第二个实例的时候,print($this->name )变成了print( $obj2->name),于是就输出了"PHP"。所以说,this就是指向当前对象实例的指针,不指向任何其他对象或类。
 

{二}。PHP中this,self,parent的区别之二self篇

此篇我们就self的用法进行讲解

首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。假如我们使用类里面静态(一般用关键字static)的成员,我们也必须使用self来调用。还要注意使用self来调用静态变量必须使用:: (域运算符号),见实例。

  

    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。我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this来引用,因为self是指向类本身,与任何对象实例无关。然后前面使用的this调用的是实例化的对象$obj,大家不要混淆了。

关于self就说到这里,结合例子还是比较方便理解的。第二篇结束。

 

{三}PHP中this,self,parent的区别之三parent篇

此篇我们就parent的用法进行讲解。

首先,我们明确,parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。实例如下:

 //建立基类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

 ?>

里面同样含有this的用法,大家自己分析。我们注意这么个细节:成员属性都是public(公有属性和方法,类内部和外部的代码均可访问)的,特别是父类的,这是为了供继承类通过this来访问。关键点在语句①:parent::__construct( "heiyeluren"),这时候我们就使用parent来调用父类的构造函数进行对父类的初始化,这样,继承类的对象就都给赋值了name为PBPHome。我们可以测试下,再实例化一个对象$personObject1,执行打印后name仍然是PBPHome。

总结:this是指向对象实例的一个指针,在实例化的时候来确定指向;self是对类本身的一个引用,一般用来指向类中的静态变量;parent是对父类的引用,一般使用parent来调用父类的构造函数。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Bittensor가 AI 트랙에서 'Bitcoin'이라고 말하는 이유는 무엇입니까? Bittensor가 AI 트랙에서 'Bitcoin'이라고 말하는 이유는 무엇입니까? Mar 04, 2025 pm 04:06 PM

원본 : Bittensor = Aibitcoin : S4mmyeth, 분산 AI 연구 원본 번역 :이 기사에서는 Bittensor, 분산 된 AI 플랫폼에 대해 논의하고, 중앙 집중식 AI 회사의 독점을 홍보하고 개방형 및 사형에 Ecosystem을 홍보하기를 희망합니다. Bittensor는 다양한 AI 솔루션의 출현을 허용하는 서브넷 모델을 채택하고 TAO 토큰을 통해 혁신을 고무시킵니다. AI 시장은 성숙하지만 Bittensor는 경쟁 위험에 직면하며 다른 오픈 소스의 적용을받을 수 있습니다.

한국 비트 코인과 국내 비트 코인의 차이가 있습니까? 한국 비트 코인과 국내 비트 코인의 차이가 있습니까? Mar 05, 2025 pm 06:51 PM

Bitcoin Investment Boom은 세계 최초의 분산 디지털 자산으로 인해 계속 가열되어 분산 및 글로벌 유동성에 많은 관심을 끌었습니다. 중국은 한때 비트 코인의 가장 큰 시장 이었지만 정책 영향으로 인해 거래 제한이 발생했습니다. 오늘날 한국은 세계의 주요 비트 코인 시장 중 하나가되어 투자자들이 IT와 국내 비트 코인의 차이점에 의문을 제기했습니다. 이 기사는 양국의 비트 코인 시장의 차이점에 대한 심층 분석을 수행 할 것입니다. 한국과 중국 비트 코인 시장의 차이점은 한국과 중국의 비트 코인 시장의 주요 차이점은 가격, 시장 공급 및 환율, 규제 감독, 시장 유동성 및 거래 플랫폼에 반영됩니다. 예를 들어, 2024 년 10 월 말에 한국의 비트 코인 가격은 한 번이었습니다.

수직 프록시 : 응용 시나리오 및 암호화 원시 프록시의 파괴적 잠재력 해석 수직 프록시 : 응용 시나리오 및 암호화 원시 프록시의 파괴적 잠재력 해석 Mar 04, 2025 am 10:21 AM

인공 지능 에이전트 (Aiagents)는 대기업에서 소기업에 이르기까지 기업의 일상 운영에 빠르게 통합되고 있으며, 거의 모든 영역 (거의 모든 영역이 영업, 마케팅, 재무, 법률, 프로젝트 관리, 물류, 고객 서비스 및 워크 플로우 자동화를 포함하여 사용되기 시작했습니다. 우리는 데이터의 수동 처리 시대에서 반복적 인 작업을 수행하며 Excel 테이블을 사용하여 시계 주변의 AI 에이전트의 자율 운영 시대로 이동하여 효율성을 향상시킬뿐만 아니라 비용을 크게 줄입니다. Web2에서 AI 에이전트의 응용 사례 : Ycombinator의 관점 Apten : AI 및 SMS 기술을 결합한 영업 및 마케팅 최적화 도구. Bildai : 건축 청사진을 읽을 수있는 모델,

Nexo는 어떤 교환입니까? Nexo는 어떤 교환입니까? Mar 05, 2025 pm 07:39 PM

NEXO : Cryptocurrency Exchange 일뿐 만 아니라 Digital Financial Manager는 기존의 Cryptocurrency 교환이 아니라 Cryptocurrency 대출에 더 중점을 둔 재무 플랫폼입니다. 이를 통해 사용자는 Cryptocurrency에서 담보로 대출을 받고이자를 얻기위한 서비스를 제공 할 수 있습니다. Nexo는 암호 화폐 구매, 판매 및 상환 기능도 제공하지만 핵심 비즈니스는 암호화 대출입니다. 이 기사는 Nexo의 운영 모델과 보안을 탐구하여 투자자에게보다 포괄적 인 이해를 제공합니다. Nexo의 운영 모델은 2018 년에 설립되었으며 스위스 Zug에 본사를두고 있으며 디지털 금융 분야의 선구자입니다. 다른 중앙 대응 교환과 다르며 포괄적 인 금융 서비스 제공에 더 중점을 둡니다. 사용자는 자산을 판매하지 않고 암호 화폐를 구매, 판매, 거래 할 수 있으며

에테르와 비트 코인의 차이 에테르와 비트 코인의 차이점은 무엇입니까 에테르와 비트 코인의 차이 에테르와 비트 코인의 차이점은 무엇입니까 Mar 19, 2025 pm 04:54 PM

이더 리움과 비트 코인의 차이는 중요합니다. 기술적으로 Bitcoin은 POW를 사용하고 Ether는 POW에서 POS로 전환했습니다. 비트 코인의 경우 거래 속도가 느리고 이더 리움은 빠릅니다. 응용 프로그램 시나리오에서 Bitcoin은 지불 스토리지에 중점을두고 Ether는 스마트 계약 및 DAPP를 지원합니다. 발행 측면에서 비트 코인의 총 금액은 2,100 만 명이며 에테르 코인의 고정 된 총량은 없습니다. 각 보안 문제가 가능합니다. 시장 가치 측면에서 비트 코인은 먼저 순위를 매기고 두 가지 가격 변동이 크지 만 특성이 다르기 때문에 이더 리움의 가격 추세는 독특합니다.

기존 버전의 참깨 오픈 도어 게이트와 새 버전의 차이점은 무엇입니까? 기존 버전의 참깨 오픈 도어 게이트와 새 버전의 차이점은 무엇입니까? Mar 04, 2025 pm 01:33 PM

이 기사는 기존 버전의 참깨 Open Door Gate.io Trading Platform과 새 버전의 차이점을 소개합니다. 인터페이스 디자인 측면에서, 새로운 버전은 더 현대적이고 간단한 시각적 스타일을 가지고 있으며, 트랜잭션 기능은 업그레이드되고, 사용자 경험은 최적화되며, 보안 성능이 추가되며, 새로운 버전의 보안 메커니즘이 업그레이드됩니다. 그러나 실제 차이는 플랫폼의 특정 업데이트 내용에 의해 결정되어야합니다.

비트 코인 투기는 주식 추측입니까? 왜? 둘의 차이점은 무엇입니까? 비트 코인 투기는 주식 추측입니까? 왜? 둘의 차이점은 무엇입니까? Mar 05, 2025 pm 02:24 PM

비트 코인 : 디지털 금 또는 주식 거래 파생 상품? 신흥 투자 방법으로서 Bitcoin의 특성에 대한 심층적 인 분석은 가격이 크게 변동되었으며 주식 시장 거래 규칙과 유사합니다. 이 기사는 정의, 자연, 발행 메커니즘 등의 측면에서 심층적 인 논의를하고 Bitcoin Investment의 신비를 공개합니다. 비트 코인 및 주식 : 비트 코인과 주식의 필수 차이는 비트 코인에 대한 투자는 주식에 대한 투자와 다릅니다. 비트 코인은 디지털 자산 또는 가상 자산 범주에 속하는 분산 디지털 통화입니다. 이 개념은 2009 년 나카모토 사토시가 제안했습니다. 기존 통화와 달리

콩 빵과 딥스 크의 차이점은 무엇입니까? 콩 빵과 딥스 크의 차이점은 무엇입니까? Mar 12, 2025 pm 01:24 PM

Bean Bun과 Deepseek의 핵심 차이는 검색 정확도와 복잡성입니다. 1. Doubao는 키워드 일치, 단순하고 직접적인 비용이 저렴하지만 정확도는 낮으며 구조화 된 데이터에만 적합합니다. DeepSeek은 딥 러닝을 기반으로하며 의미가 높지만 높은 비용을 가지고 있으며 구조화되지 않은 데이터에 적합합니다. 최종 선택은 애플리케이션 시나리오 및 자원 제한에 따라 달라집니다. 정확도 요구 사항이 높지 않은 경우 콩 주머니를 선택하고 높은 정밀도를 선택하면 DeepSeek을 선택하십시오.

See all articles