php中static和self的区别
在阅读一些框架的源码时发现了new static(),和new self(),甚是不解,后来查阅资料,才知道static采用了延迟绑定,能准确知道是父类还是子类的调用。这就是说static是个聪明的小孩,家里的亲戚的辈分他都能准确的叫出;而不是像他的兄弟self,只知道自己的亲爹妈。
例子如下:
<?php
class Father{
    protected  static $name = "father";
    public static function whoami_self(){
        echo self::$name."\n";
    }
    public static function whoami_static(){
        echo static::$name."\n";
    }
    public static function getInstance_self(){
        return new self();
    }
    public static function getInstance_static(){
        return new static();
    }
}
class FatherBrother extends Father{
    protected  static $name = "uncle";
}
FatherBrother::whoami_self(); //father
FatherBrother::whoami_static(); //uncle
var_dump(FatherBrother::getInstance_self()); //father
var_dump(var_dump(FatherBrother::getInstance_static())); //uncle
php中static和self的区别的更多相关文章
- Java中static和final的区别
		static是静态修饰关键字,可以修饰变量和程序块以及类方法: 当定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存: 当修饰一个程序 ... 
- PHP 中 static 和  self 的区别
		使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类: 使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为" ... 
- static和final的区别(转载)
		Java中static 和final的区别 final定义的变量可以看做一个常量,不能被改变: final定义的方法不能被覆盖: final定义的类不能被继承. final static 就是再加上s ... 
- c#中const、static、readonly的区别
		1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ... 
- Java中static、final、static final的区别(转)+transient
		说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ... 
- vue-cli中自定义路径别名 assets和static文件夹的区别
		转自:vue-cli中自定义路径别名 assets和static文件夹的区别 静态资源处理: assets和static文件夹的区别 相信有很多人知道vue-cli有两个放置静态资源的地方,分别是sr ... 
- Java中static final 与 final 的区别(转载)
		转自:http://advance0683.iteye.com/blog/1107732 Java中static final 与 final 的区别: 例子: Java代码 import java.u ... 
- PHP面向对象中 static:: 与 self::  parent:: $this->  的区别
		很多好几年工作经验的PHP工程师,对PHP面向对象中 static:: .self::.parent::.$this-> 的定义和使用都不清晰,特做详细梳理: static:: 可以访问全局作 ... 
- Java中Comparable和Comparator接口区别分析
		Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ... 
随机推荐
- 洛谷 p1123 取数游戏【dfs】
			题目链接:https://www.luogu.org/problemnew/show/P1123 转载于:>>>>>> 题目描述 一个N×M的由非负整数构成的数字矩 ... 
- SSID 已经一个路由器设多个SSID
			SSID(Service Set Identifier) SSID,AP唯一的ID码,许多人认为可以将SSID写成ESSID,其实不然,SSID是个笼统的概念,包含了ESSID和BSSID,用来区 ... 
- 监听发现局域网dropbox客户端broadcast-dropbox-listener
			监听发现局域网dropbox客户端broadcast-dropbox-listener Dropbox是一款网盘文件同步工具.为了实现局域网内同步,该工具会通过UDP 17500端口发送广播包.N ... 
- div+css布局记扎
			实际开发网站过程中边碰壁边积累了一些div+css布局相关的小技巧,在这里做一些整理与大家一起探讨.本文章将间歇性更新. 1.div+css布局综述 div+css布局个人观点就是“盒子套盒子”的关系 ... 
- Python中应用SQL及SQLAlchemy(一)
			以SQLit3为例: import sqlite3 conn = sqlite3.connect('db.sqlite3') #获取游标对象 cur = conn.cursor() #执行一系列SQL ... 
- java显示树结构
			/** * 显示多颗树的所有节点的信息 * * @param departmentList */ private void showTreeList(Collection<Department& ... 
- 手动更新nexus的索引
			安装nexus 1.下载 源码包 nexus-2.13.0-01-bundle.tar.gz 下载地址 http://www.sonatype.org/nexus/ 2.解压源码包 3.启动并访问 . ... 
- 来自极客头条的 15个常用的javaScript正则表达式
			摘要收集整理了15个常用的javaScript正则表达式,其中包括用户名.密码强度.整数.数字.电子邮件地址(Email).手机号码.身份证号.URL地址. IPv4地址. 十六进制颜色. 日期. Q ... 
- Chromium OS 初体验
			Chromium OS可是早有耳闻,但是一直没有尝试,最近很多评论甚至认为会对Windows和Mac都能够造成压力,于是迫不及待的想尝试一下了,百度下了官网,官网很贴心,不光给了用于写入U盘的镜像文件 ... 
- JavaScript – Convert Image to Base64 String
			From: https://bytenota.com/javascript-convert-image-to-base64-string/ his post shows you two approac ... 
