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 不再只是简 ...
随机推荐
- Traceview 性能分析工具
简介 TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method.详细内容参考:http://deve ...
- C#反射—解决类的实例化问题
利用简单工厂模式来改进抽象工厂使用的复杂性(抽象工厂详见 设计模式之—抽象工厂模式) 数据表(User)业务处理接口(IUser) namespace FactoryMethodPatternDB.C ...
- Linq101-Restriction
using System; using System.Linq; namespace Linq101 { class Restriction { /// <summary> /// Thi ...
- XML 标记使用的特殊字符对应内置实体
下表为 XML 标记使用的字符列出了五种内置实体. 实体 实体引用 含义 lt < <(小于号) gt > >(大于号) amp & &(“and”符) a ...
- centos6 x86 安装 oracle 11g2r 日志
一.安装centos 6.5 二.安装ora所需的库 三.修改centos内核 四.建用户组和目录结构等 五.安装ora11g2r 六.安装sqlplus的翻页程序和help补丁 七.自启动脚本 八. ...
- Swift - 11 - nil聚合运算
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- VsCode使用技巧
VsCode版本1.7.2 1. node智能提示:vscode1.7之前的版本智能提示是采用jsconfig.json方式,在右下角会有小灯泡,点击创建jsconfig.json.1.7之后使用Ty ...
- Cloudera Manager(CentOS)安装介绍
相信通过这篇文章大家都对Cloudera Manager及CDH安装有一个整体的认识 目 录 1 准备工 作.................................... ...
- gdb调试带参数程序(转:笑笑小白,cnblog http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html)
一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > ...
- underscorejs-invoke学习
2.13 invoke 2.13.1 语法: _.invoke(list, method, *args) 2.13.2 说明: 每个list属性值都执行method方法,根据method方法返回一个数 ...