目录
php面向对象的简单总结 $this $parent self
首页 php教程 php手册 php面向对象的简单总结 $this $parent self

php面向对象的简单总结 $this $parent self

Jun 13, 2016 am 09:19 AM
对象

php面向对象的简单总结 $this $parent self

 虽然接触php比较长时间,但有时在使用一些基础东西的时候还会有些不确定,有些疑惑。面向对象涉及到的比较多,大概总结整理一下php的属性、对象,以及访问方式$this  $parent  self  的使用场景。

 

1. PHP类属性定义和访问方式:

 

 

 1

 2 class testClass {

 3     const tConst = 1;

 4     public $tVar = 2;    //或 public $tVar;  前面需要有变量修饰符

 5     static $tSta = 3;

 6 

 7     public function __construct(){

 8         echo $this->tConst;    //无错误,无输出

 9         echo self::tConst;    //正确输出 1

10         

11         echo $this->tVar;    // 注意tVar前不能有$符号

12         echo self::$tVar;    // Access to undeclared static property: testClass::$tVar

13         echo self::tVar;    // tVar前需要加上$符号,Undefined class constant 'tVar'

14         

15         echo $this->tSta;    //无错误,无输出

16         echo self::$tSta;    //正确输出 3

17         

18     }

19 }

20 

21 $otestClass = new testClass();

 

 

 

 

 

总结几点:

 

在实例化对象时  $otestClass = new testClass(); 其中testClass()中的()可以省略,当构造函数有显式声明需要参数时,需要在这里传入参数

如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::

如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用操作符->

从类的内部访问const或者static变量或者方法,使用自引用的self

从类的内部访问不为const或者static变量或者方法,使用自引用的$this

2. $this->  究竟指向哪?

 

 1 class testClass {

 2     var $nick = '';

 3     

 4     public function __construct($nick){

 5         $this->nick = $nick;

 6     }

 7     

 8     public function display(){

 9         echo $this->nick;

10     }

11 }

12 

13 $otestClass1 = new testClass('frank');

14 $otestClass1->display();        //echo $otestClass1->nick;  和此结果相同

 

 

 

上面例子中,$this->display();   其实就是 $otestClass1->nick,因此$this究竟指向哪是由所实例化的对象决定的,指向当前对象实例的指针。包括变量、方法都是如此

 

$this->方法() 的例子:

 

 

 1 class baseClass{

 2     public function testFunc(){

 3         echo "\n" . 'I`m boss';

 4     }

 5 }

 6 

 7 class parentClass extends baseClass{

 8     public function testFunc(){

 9         echo "\n" . 'I`m the up';

10     }

11 }

12 

13 class testClass extends parentClass{

14     var $nick = '';

15     

16     public function __construct($nick){

17         $this->nick = $nick;

18     }

19     

20     public function display(){

21         echo $this->nick;

22         $this->testFunc();

23     }

24 }

25 

26 $otestClass1 = new testClass('frank');

27 $otestClass1->display();

 

 

 

这样的代码最后的输出结果是什么呢?关键是看testFunc()方法。

 

如果在类中用$this调用一个当前类中不存在的方法或变量,它会依次去父类寻找,直到找不到再报错

基于第一条,如果找到了需要的方法或变量,就会停止寻找,如果其上级父类中还有同样的,则选择当前找到的

所以上面代码输出为:

 

frank

I`m the up

 

 

3. 关于parent::

 

parent是对父类的引用

 

 

 1

 2 class A {

 3     public  $a = 'aa';

 4     public function callFunc(){

 5         echo 'parent';

 6     }

 7 }

 8 

 9 class B extends A{

10     public function __construct(){

11         parent::callFunc();

12         echo "\n" . $this->a;

13     }

14 }

15 

16 $oB = new B;

 

比如,上面的代码中,在class B中,若要调用其父类A中的callFunc()方法,就需要使用parent::callFunc(),但A类中此方法必须是public修饰的,否则会提示 Fatal error: Call to private method A::callfunc() from context 'B'...

 

另外需要注意的是,对于父类中的属性$a,调用的时候用$this,用parent就访问不到了。若$a在A类中是这样定义的:public static $a,则访问的时候就需要parent::$a

 

注意,parent不具备传递性,它只能代表当前类的父类,若此例子A类继承base类,在base类中定义baseFunc()方法,那么在B类中使用parent::baseFunc()是错误的,只能在A类中这样使用。

 

4. self::又指向哪里?

 

简单的说,self和某具体实例没有关系,它只指向当前类,不会受某具体类对象的影响

 

 

 1 class testClass{

 2     public static $count = 0;

 3     public $num = 0;

 4     

 5     function __construct(){

 6         self::$count++;

 7         $this->num++;

 8     }

 9     

10     function display(){

11         echo self::$count . "\n";

12         echo $this->num . "\n";

13     }

14 }

15 

16 $oTest1 = new testClass;

17 $oTest1->display();        //输出: 1  1

18 

19 $oTest2 = new testClass;

20 $oTest2->display();        //输出: 2  1

 

 

上面例子中self::$cout始终指向该类本身,而$num是单独存在于各个具体实例中的。

 

 

 

5. 总结:

 

  $this 指向当前的实例

 

  $parent 是父类的引用

 

  self 对当前类本身的一个引用

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用PHP的json_encode()函数将数组或对象转换为JSON字符串 使用PHP的json_encode()函数将数组或对象转换为JSON字符串 Nov 03, 2023 pm 03:30 PM

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,已经成为Web应用程序之间数据交换的常用格式。PHP的json_encode()函数可以将数组或对象转换为JSON字符串。本文将介绍如何使用PHP的json_encode()函数,包括语法、参数、返回值以及具体的示例。语法json_encode()函数的语法如下:st

如何将 MySQL 查询结果数组转换为对象? 如何将 MySQL 查询结果数组转换为对象? Apr 29, 2024 pm 01:09 PM

将MySQL查询结果数组转换为对象的方法如下:创建一个空对象数组。循环结果数组并为每一行创建一个新的对象。使用foreach循环将每一行的键值对赋给新对象的相应属性。将新对象添加到对象数组中。关闭数据库连接。

源码探秘:Python 中对象是如何被调用的? 源码探秘:Python 中对象是如何被调用的? May 11, 2023 am 11:46 AM

楔子我们知道对象被创建,主要有两种方式,一种是通过Python/CAPI,另一种是通过调用类型对象。对于内置类型的实例对象而言,这两种方式都是支持的,比如列表,我们即可以通过[]创建,也可以通过list(),前者是Python/CAPI,后者是调用类型对象。但对于自定义类的实例对象而言,我们只能通过调用类型对象的方式来创建。而一个对象如果可以被调用,那么这个对象就是callable,否则就不是callable。而决定一个对象是不是callable,就取决于其对应的类型对象中是否定义了某个方法。如

使用Python的__contains__()函数定义对象的包含操作 使用Python的__contains__()函数定义对象的包含操作 Aug 22, 2023 pm 04:23 PM

使用Python的__contains__()函数定义对象的包含操作Python是一种简洁而强大的编程语言,提供了许多强大的功能来处理各种类型的数据。其中之一是通过定义__contains__()函数来实现对象的包含操作。本文将介绍如何使用__contains__()函数来定义对象的包含操作,并且给出一些示例代码。__contains__()函数是Pytho

数组和对象在 PHP 中的区别是什么? 数组和对象在 PHP 中的区别是什么? Apr 29, 2024 pm 02:39 PM

PHP中,数组是有序序列,以索引访问元素;对象是具有属性和方法的实体,通过new关键字创建。数组访问通过索引,对象访问通过属性/方法。数组值传递,对象引用传递。

详解Javascript对象的5种循环遍历方法 详解Javascript对象的5种循环遍历方法 Aug 04, 2022 pm 05:28 PM

Javascript对象如何循环遍历?下面本篇文章给大家详细介绍5种JS对象遍历方法,并浅显对比一下这5种方法,希望对大家有所帮助!

使用Python的__le__()函数定义两个对象的小于等于比较 使用Python的__le__()函数定义两个对象的小于等于比较 Aug 21, 2023 pm 09:29 PM

标题:使用Python的__le__()函数定义两个对象的小于等于比较在Python中,我们可以通过使用特殊方法来定义对象之间的比较操作。其中之一就是__le__()函数,它用于定义小于等于比较。__le__()函数是Python中的一个魔法方法,并且是一种用于实现“小于等于”操作的特殊函数。当我们使用小于等于运算符(<=)比较两个对象时,Python

PHP中的Request对象是什么? PHP中的Request对象是什么? Feb 27, 2024 pm 09:06 PM

PHP中的Request对象是用于处理客户端发送到服务器的HTTP请求的对象。通过Request对象,我们可以获取客户端的请求信息,比如请求方法、请求头信息、请求参数等,从而实现对请求的处理和响应。在PHP中,可以使用$_REQUEST、$_GET、$_POST等全局变量来获取请求的信息,但是这些变量并不是对象,而是数组。为了更加灵活和方便地处理请求信息,可

See all articles