PHP类中self和$this的区别
1.self代表类,$this代表对象
2.能用$this的地方一定使用self,能用self的地方不一定能用$this
静态的方法中不能使用$this,静态方法给类访问的。
今天在使用静态方法的时候,使用了$this去调用对象的属性,导致曝出错误信息,在网上查询了手册和百度,
发现大部分回答只是说明了在静态方法中不允许使用$this,只能使用self,较为靠谱的回答说明是$this是实例化对象的指针,self是对象的指针。
针对以上信息,综合自己的学习知识和网上搜索结果作下图:

其中,我们可以明显看到,self调用的类的指针,而非实例化后的对象指针,静态变量和静态方法始终属于类,而非属于实例化后的对象,因此在静态方法中无法使用$this,因为此时所处的位置是类所在的指针,只能使用self调用静态方法或者静态变量。
如果要在静态方法中,强制使用函数的其他方法,则只能先实例化一个新的对象,然后再使用该对象的方法。
综上所述,self调用的是类,而$this调用的则是实例化的对象。下面是代码。
<?php
class demo {
public $a;
public $b;
public static $c = 100; public function __construct($a) {
$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();
PHP类中self和$this的区别的更多相关文章
- 【转】python类中super()和__init__()的区别
[转]python类中super()和__init__()的区别 单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(se ...
- STL:string类中size()与length()的区别
结论是:两者没有任何区别 解释: C++Reference中对于两者的解释: 两者的具体解释都一模一样: 理解: length是因为C语言的习惯而保留下来的,string类最初只有length,引进S ...
- php类中双冒号和->的区别
就是为了区分对象的方法和属性,和是访问类的静态方法和静态变量,类的静态方法和静态变量是类公用的,不需要实例化也能访问,而对象的方法和属性是每个对象特有的,因此必须先实例化.其他语言如C++,JAVA等 ...
- StringUtils类中isEmpty与isBlank的区别
org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ...
- StringUtils类中 isEmpty() 与 isBlank()的区别
org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ...
- python类中super()和__init__()的区别
class Base(object): def __init__(self): print 'Base create' class childB(Base): def __init__(sel ...
- java中File类中list()和listFiles()方法区别
list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的[文件名](包含后缀名),后者为Fi ...
- android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别
android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...
- 关于Integer类中parseInt()和valueOf()方法的区别以及int和String类性的转换.以及String类valueOf()方法
Integer类中的. 关于parseInt()方法的API文档. 返回的是int类型的 关于valueOf()方法的API文档 返回的是Integer类型的. 关于intValue()方法的API ...
随机推荐
- Maya cmds pymel 快速选择hard edges(硬边)
Maya cmds pymel 快速选择hard edges(硬边) import maya.cmds as cmds cmds.polySelectConstraint(m = 3, t = 0x8 ...
- poi设置打印页页脚和页数设置
之前在网上搜了很久,也没有搜到具体页脚页数的答案,最后还是在官方api文档上找到了答案: HSSFPrintSetup printSetup = (HSSFPrintSetup) sheet.getP ...
- Java 之 CSS
1.CSS a.定义:CSS 指层叠样式表 b.意义:为了解决内容与表现分离的问题 c.特点:多个样式可层叠为一 2.用法: a.行内样式:style <span style="col ...
- ZOJ 1109 Language of FatMouse 【Trie树】
<题目链接> 题目大意: 刚开始每行输入两个单词,第二个单词存入单词库,并且每行第二个单词映射着对应的第一个单词.然后每行输入一个单词,如果单词库中有相同的单词,则输出它对应的那个单词,否 ...
- AngularJS的Scope和Digest
Angular是一个成熟和强大的JavaScript框架.它也是一个比较庞大的框架,在熟练掌握之前,需要领会它提出的很多新概念.很多Web开发人员涌向Angular,有不少人面临同样的障碍.Diges ...
- mysql 数据库(二)数据库的基本操作
mysql 数据库(二)数据库的基本操作 用户管理,添加权限,创建,显示,使用数据库 1 显示数据库:show databases; 默认数据库: mysql - 用户权限相关数据 test - 用于 ...
- zabbix安装和配置
- Alpha(8/10)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- logging模块、sys模块、shelve模块
一.logging模块 1.logging模块就是用于记录日志的,日志就是记录某个时间点,发生的事情. 2.记录日志是为了日后来复查,提取有用的信息. 3.如何去记录日志:可以直接打开文件,记录信息, ...
- jquery 1.7.2源码解析(一)总体架构
总体架构 jquery模块分类和依赖关系: 自调用匿名函数: /** * 自调用匿名函数,jquery加载完后立即被调用,用来加载各个模块 * 为什么使用自调用匿名函数: * 通过使用自调用匿名函数, ...