PHP中parent、this、self和static的区别
参考:
http://www.cnblogs.com/devcjq/articles/2424738.html
http://www.cnblogs.com/alsf/p/9621002.html
https://blog.csdn.net/xf552527/article/details/81325815
1.PHP之parent解析
parent是指向父类的指针,一般用于调用父类的构造函数来初始化子类,如parent::__construct()
2.PHP之$this解析
$this是指向当前对象(即类的实例化对象)的指针
- $this 指向的是实际调用时的对象,也就是说,实际运行过程中,谁调用了类的属性或方法,$this 指向的就是哪个对象。
- $this 不能访问类的静态属性和常量,且 $this 不能存在于静态方法中,因为静态变量和静态方法是属于类的,而非属于类实例化后的对象。
- 如果要在静态方法中,强制使用类的其他方法,则只能先获取类的实例化对象(new classname()),然后再使用该对象的方法。
- 当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象)。
3.PHP之self解析
self是指向当前类的指针,而非实例化后的对象指针
- self 和 __CLASS__,都是对当前类的静态引用,取决于定义当前方法所在的类。即self 写在哪个类里面,它引用的就是谁。
- 由于静态变量和静态方法是属于类的,因此可以使用指向当前类的指针self调用。
- self 可以用于访问类的静态属性、静态方法和常量,但 self 指向的是当前定义所在的类,这是 self 的限制
4.PHP之static解析
static是指向当前调用类的指针
- 静态调用时,static 指向的是实际调用时的类;非静态调用时,static 指向的是实际调用时的对象所属的类。
- static 可以用于静态或非静态方法中,也可以访问类的静态属性、静态方法、常量和非静态方法,但不能访问非静态属性。
- static 关键字除了可以声明类的静态成员(属性和方法)外,还有一个非常重要的作用就是后期静态绑定
<?php
class Boo {
protected static $str = "This is class Boo";
public static function get_info(){
echo get_called_class()."\n";
echo self::$str;
}
public static function get_msg(){
echo get_class()."\n";
echo static::$str;
}
}
class Foo extends Boo{
protected static $str = "This is class Foo";
}
Foo::get_info();
echo "\n";
Foo::get_msg();
?>
//输出结果
Foo
This is class Boo
Boo
This is class Foo
PHP中parent、this、self和static的区别的更多相关文章
- PHP中new self()和new static()的区别
1.new static()是在PHP5.3版本中引入的新特性. 2.无论是new static()还是new self(),都是new了一个新的对象. 3.这两个方法new出来的对象有什么区别呢,说 ...
- PHP中new self()和new static()的区别探究
1.new static()是在PHP5.3版本中引入的新特性. 2.无论是new static()还是new self(),都是new了一个新的对象. 3.这两个方法new出来的对象有什么区别呢,说 ...
- 在java中public void与public static void区别
static 方法可以被main方法直接调用,而非static方法不可以.因为static方法是属于类的,是类方法.可以通过类名.方法名直接调用.而非static方法必须等对象被new出来以后才能使用 ...
- PHP面向对象中new self( )和 new static( ) 的区别
在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. class A { public static $_a = 'Class A'; public static ...
- JAVA中,一个类中,方法加不加static的区别,
通俗理解: 1.若是对象的特有行为,(也就是某个实例方法特有的行为),不加static 2. 若是对象集合共有的集合,则加static static类型方法只可以访问静态变量和方法 实例方法可以访问实 ...
- spring中<bean>中parent标签的使用
简介:spring 中parent标签是指:某个<bean>的父类.这个类可以覆盖parent的属性, 代码如下: Parent类的代码如下: package com.timo.domai ...
- Java中主类中定义方法加static和不加static的区别
Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...
- Jquery中parent()和parents()
一.parent()方法 此方法取得匹配元素集合中每个元素的紧邻父元素,也就是第一级父元素,而不是所有的祖先元素.所取得的父元素集合也可以使用表达式进行筛选. 二.parents()方法 此方法取得一 ...
- vue中assets和static的区别
Vue中assets和static的区别 再一次框架定型中,与同事在静态资源的存放上有了一些分歧,后来经过查阅总结如下: 相同点: assets和static两个都是存放静态资源文件.项目中所需要 ...
- PHP中parent关键词
parent关键词 parent表示“父母”的意思,在面向对象语法中,代表“父类” ——本质上就是代表父类这个“类”,而不是父类的“对象”: 其使用方式为: parent::属性或方法: //通常是静 ...
随机推荐
- Twain
3.7.37 ICAP_SUPPORTEDSIZESType:TW_UINT16Supported Messages:MSG_GET - TW_ENUMERATIONMSG_GETCURRENT - ...
- ERP项目实施记录01
工厂8月中与某ERP服务商签约,至今已经过去4个月,顾问服务了13人天,进行了10次培训. 内部产生项目文档1个:物料编码方案 制度:0个 流程:无 因ERP服务商不是针对本行业的,在BOM和生产计划 ...
- dts中memreserve和reserved-memory的区别 (转)
https://blog.csdn.net/kickxxx/article/details/54631535
- [No0000188][VCB-Studio 科普教程 2.5] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)
Potplayer 是高清影视常用的播放器,界面简洁,功能齐全,比 MPC-HC 和 MPC-BE 更人性化:但其默认方案十分糟糕,预设过多错误,无法正确播放 10-bit 视频,一直饱受诟病.VCB ...
- day5:字典dict
1, 判断是不是列表 li = ['lis3a', 'mary', 'lucy', 'hh', 'kk', 'gg', 'mm', 'oo', 'vv'] if type(li) == list: p ...
- PHP之类型转化
类型转化的判别 PHP在变量定义中不需要(或者不支持)明确的类型定义:变量类型是根据使用该变量的上下文所决定的, 也就是说,如果把一个string值付给变量$var,$var就成了一个string,如 ...
- Chap7:民间用语[《区块链中文词典》维京&甲子]
- jmeter发送https请求
- 20165336 实验一 Java开发环境的熟悉
20165336 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- MVVM软件设计模式(转)
add by zhj: MVVM是一种软件设计模式,这里要说一下设计模式,我们通常所的设计模式是指面向对象中的设计模式,用在面向对象编程语言中.但软件设计模式是更高一个级别的设计模式,两者不是同一个东 ...