首页 后端开发 php教程 php中的三个关键字this,self和parent实例用法详解

php中的三个关键字this,self和parent实例用法详解

Jul 08, 2017 am 10:10 AM
php self this

首先我们来明白上面三个关键字: this,self,parent,从字面上比较好理解,是指这,自己,父亲,呵呵,比较好玩了,我们先建立几个概念,这三个关键字分别是用在什么地方呢?我们初步解释一下,this是指向当前对象的指针(我们姑且用C里面的指针来看吧),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  
 //第二次实例化对象  
 $nameObject = new UserName( "PHP" );  
 //执行打印  
 $nameObject->printName(); //输出:PHP  
 ?>
登录后复制


我们看,上面的类分别在行和行使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象的时候(行),那么当时this就是指向$nameObject对象,那么执行行的打印的时候就把print( $this->name ),那么当然就输出了"heiyeluren"。第二个实例的时候,print( $this->name )变成了print( $nameObject->name ),于是就输出了"PHP"。所以说,this就是指向当前对象实例的指针,不指向任何其他对象或类。
(2)self
首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。

代码如下:

<?php  
     class Counter  
     {  
         //定义属性,包括一个静态变量  
         private static $firstCount = ;  
         private $lastCount;  
         //构造函数  
         function construct()  
         {  
              $this->lastCount = ++selft::$firstCount; //使用self来调用静态变量,使用self调用必须使用::(域
运算符
号)  
         }  
         //打印最次数值  
         function printLastCount()  
         {  
              print( $this->lastCount );  
         }   
     }  
 //实例化对象  
 $countObject = new Counter();  
 $countObject->printLastCount(); //输出   
 ?>
登录后复制

我们这里只要注意两个地方,第行和第行。我们在第二行定义了一个静态变量$firstCount,并且初始值为,那么在行的时候调用了这个值得,使用的是self来调用,并且中间使用"::"来连接,就是我们所谓的域运算符,那么这时候我们调用的就是类自己定义的静态变量$frestCount,我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this来引用,可以使用self来引用,因为self是指向类本身,与任何对象实例无关。换句话说,假如我们的类里面静态的成员,我们也必须使用self来调用。
(3)parent
我们知道parent是指向父类的指针,一般我们使用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", "");  
 //执行打印  
 $personObject->printPerson(); //输出:heiyeluren is male,this year   
 ?>
登录后复制

我们注意这么几个细节:成员属性都是public的,特别是父类的,是为了供继承类通过this来访问。我们注意关键的地方,第行:parent::construct( "heiyeluren" ),这时候我们就使用parent来调用父类的构造函数进行对父类的初始化,因为父类的成员都是public的,于是我们就能够在继承类中直接使用this来调用。
总结:
this是指向对象实例的一个指针,self是对类本身的一个引用,parent是对父类的引用。

以上是php中的三个关键字this,self和parent实例用法详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

CakePHP 项目配置 CakePHP 项目配置 Sep 10, 2024 pm 05:25 PM

在本章中,我们将了解CakePHP中的环境变量、常规配置、数据库配置和电子邮件配置。

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

在本章中,我们将学习以下与路由相关的主题?

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

可以通过在控制器中添加以下两行来创建验证器。

See all articles