php中的后期静态绑定("Late Static Binding")
在我们以往中,在类中使用self关键字的时候都是指向了被调用方法定义时的类,而非原始的调用类。
例如:
class Animal{
static $IQ_lv_avg = 1;
public static function myiqlvavg(){
echo self::$IQ_lv_avg.PHP_EOL;
}
public static function test(){
self::myiqlvavg();
}
}
class Dog extends Animal{
static $IQ_lv_avg = 3;
public static function myiqlvavg(){
echo self::$IQ_lv_avg.PHP_EOL;
}
}
Dog::test();//echo 1
我们可以得到最后得到的平均IQ等级是1
self指向的是定义其所在方法的类。
我们如果想执行Dog类,也就是调用类的静态方法怎么办呢?
静态后期绑定可以做到。
使用方法其实就是使用static关键字。
例如:
class GrandparentClass{
static $age = 40;
public static function foo(){
static::whatMyAge();
}
public static function whatMyAge(){
echo __CLASS__.PHP_EOL;
}
}
class ParentClass extends GrandparentClass{
static $age = 60;
public static function start(){
GrandparentClass::foo();
parent::foo();
self::foo();
}
}
class ChildrenClass extends ParentClass{
static $age = 90;
public static function whatMyAge(){
echo __CLASS__.PHP_EOL;
}
}
ChildrenClass::start();
最终获得的年代为:
40 90 90
在静态方法中,我们可以使用get_called_class()函数得知调用静态方法的类名。
例如:
class foo {
static public function test() {
var_dump(get_called_class());
}
}
class bar extends foo {
}
foo::test();//echo foo
bar::test();//echo bar
在php 5.5之后可以使用static::class 达到get_called_class()同效果。
Note:可以直接调用phpversion函数查看当前php版本,或者cli模式查看,总之方法多多。
php中的后期静态绑定("Late Static Binding")的更多相关文章
- get_called_class--后期静态绑定("Late Static Binding")类的名称
get_called_class--后期静态绑定("Late Static Binding")类的名称 string get_called_class ( void ) 获取静态方 ...
- php中的后期静态绑定
后期静态绑定PHP手册 使用的保留关键字: static 定义: static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为"静态绑定",因为它可以用 ...
- 139-PHP static后期静态绑定(二)
<?php class test{ //创建test类 public function __construct(){ static::getinfo(); //后期静态绑定 } public s ...
- 138-PHP static后期静态绑定(一)
<?php class test{ //创建test类 public function __construct(){ self::getinfo(); //后期静态绑定 } public sta ...
- static后期静态绑定
先说一下__CLASS__,get_class() , get_called_class() 区别: __CLASS__获取当前的类名, get_class()与上面一样,都是获取当前的类名, ge ...
- php Late Static Bindings延迟静态绑定
官网说道: As of PHP 5.3.0, PHP implements a feature called late static bindings which can be used to ref ...
- PHP之后期静态绑定
PHP后期静态绑定的(late static bindings) 理解PHP延迟静态绑定 static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名.这个东西可以实现在父类 ...
- PHP 中的新语法 new static 是个啥意思?
简单通俗的来说, self就是写在哪个类里面, 实际调用的就是这个类.所谓的后期静态绑定, static代表使用的这个类, 就是你在父类里写的static, 然后通过子类直接/间接用到了这个stati ...
- php后期静态绑定
php后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简 ...
随机推荐
- 纯css+js水平时间轴
自定义,并自动加载时间节点 当前时间节点居中,突出显示 时间动态无痕添加 效果图: 初始状态 时间左走到一定2016.1月后 html: <!-- 水平时间轴 --> <div id ...
- Linq101-Miscellaneous
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Miscell ...
- android6.0源码分析之Camera API2.0下的Capture流程分析
前面对Camera2的初始化以及预览的相关流程进行了详细分析,本文将会对Camera2的capture(拍照)流程进行分析. 前面分析preview的时候,当预览成功后,会使能ShutterButto ...
- amCharts 破解
官网下载 http://www.amcharts.com 然后找到amcharts.js , 打开搜索关键字 “utm_source=swf&utm_medium=demo&utm_c ...
- 【NOIP2014】赛后总结
noip考完了,心中所牵挂的一下子就消散了,感觉浑身很轻松. 说实话,我参加noip有好几次了,这应该会是我的最后一次,尽管如此,无论是在考试的前几天还是在考试的时候,心中都没有太多的紧张. 我在no ...
- WireShark过滤语法
1.过 滤IP,如来源IP或者目标IP等于某个IP 例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168. ...
- 事后调试之MiniDump转储
程序发布后,针对在用户使用过程中出现的一些问题进行调试,这个过程可以称为是事后调试.在程序Crash时转储MiniDump文件供软件开发工程师分析是一种比较常用的方法.下面介绍两种常用的在程序Cras ...
- 代码发布架构方案(SVN)
问题: 安装优化软件环境nginx,lvs 程序代码(不断更新) 配置更新(不断变更) 1.SVN介绍 1.1 什么是SVN(Subversion)? SVN(Subversion) ...
- Android 判断当前设备是手机还是平板
Android开发需要适配手机和平板,有些需求实现时就要求判断设备是手机还是平板.网上很多说通过设备尺寸.DPI.版本号.是否具备电话功能等进行判断,不过都不算太精确.这里分享一个简洁给力的方法(官方 ...
- 关于RESTful
http://www.ruanyifeng.com/blog/2011/09/restful.html (1)每一个URI代表一种资源: (2)客户端和服务器之间,传递这种资源的某种表现层: (3)客 ...