博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP类中self和$this的区别
阅读量:4984 次
发布时间:2019-06-12

本文共 943 字,大约阅读时间需要 3 分钟。

1.self代表类,$this代表对象

2.能用$this的地方一定使用self,能用self的地方不一定能用$this
静态的方法中不能使用$this,静态方法给类访问的。

今天在使用静态方法的时候,使用了$this去调用对象的属性,导致曝出错误信息,在网上查询了手册和百度,

发现大部分回答只是说明了在静态方法中不允许使用$this,只能使用self,较为靠谱的回答说明是$this是实例化对象的指针,self是对象的指针。

针对以上信息,综合自己的学习知识和网上搜索结果作下图:

其中,我们可以明显看到,self调用的类的指针,而非实例化后的对象指针,静态变量和静态方法始终属于类,而非属于实例化后的对象,因此在静态方法中无法使用$this,因为此时所处的位置是类所在的指针,只能使用self调用静态方法或者静态变量。

如果要在静态方法中,强制使用函数的其他方法,则只能先实例化一个新的对象,然后再使用该对象的方法。

综上所述,self调用的是类,而$this调用的则是实例化的对象。下面是代码。

a = $a; $this->funct(); } public static function func() { $newObj = new self(20); $newObj->funct(); self::$c += 100; echo self::$c; } private function funct() { $this->b = $this->a * 200; } public function getC() { echo self::$c; }} $demo = new demo(3);$demo::func();$demo::getC();$demo2 = new demo(4);$demo2::func();$demo::getC();$demo2::getC();$demo->getC();

 

转载于:https://www.cnblogs.com/alsf/p/9621002.html

你可能感兴趣的文章
【网络设备】某防火墙基于IP地址的目的地址转换
查看>>
算法: 最长回文子串 二层动态规划
查看>>
硬件综合实习——51单片机四则运算带括号计算器
查看>>
cmake写完了,下一步开始清除编译错误
查看>>
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...
查看>>
行列转换总结
查看>>
Android 学习笔记之ExpandableListView UI的简单用法
查看>>
12306-车
查看>>
ADO.NET+Access: 2,至少一个参数没有被指定值
查看>>
Day 04
查看>>
centos7更改网卡名称
查看>>
ckeditor_学习(1) 基本使用
查看>>
1013团队Beta冲刺day4
查看>>
二叉树输出
查看>>
利用lambda和条件表达式构造匿名递归函数
查看>>
Spring学习之常用注解(转)
查看>>
手工模拟Oracle数据块逻辑讹误引发,ORA-00600:[13013] [5001]一例
查看>>
CSS魔法堂:你真的理解z-index吗?
查看>>
《30天自制操作系统》笔记(12)——多任务入门
查看>>
Go单元测试与基准测试
查看>>