php面向对象的简单总结 $this $parent self
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 对当前类本身的一个引用

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

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

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

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

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

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

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

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