从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法。
第二点延迟绑定,这个根据下面代码就可以很好的理解

看一下这个例子:

class A{
static $name = "Tom";
public function printName(){
echo self::$name."\n";
self::fun();
}
static function fun(){
echo "A Class\n";
}
}
class B extends A{
static $name = "Jon";
static function fun(){
echo "B Class\n";
}
}
$obj = new B();
$obj->printName();
// 输出结果
// Tom
// A Class

我在printName函数里面使用了self关键字,self是指向当前类的"指针",
所以很多人会理想的认为输出结果会是这样:

// Join
// B Class

是这样的,在定义A类的是时候,在函数printName里面使用self关键字调用了静态方法或属性,
但是这个函数一旦定义好,A类的静态方法和属性就被绑定到函数了,不要去追究为什么,php就是这么实现的,
但是我们现在要实现这样的效果,就是函数定义好后里面使用到的静态方法和属性不要立即绑定死,
而是根据最终继承的类来确定绑定。
所以php在5.5以后使用了static关键字来解决这个问题,解决后的代码例子如下:

class A{
static $name = "Tom";
public function printName(){
echo static::$name."\n";
static::fun();
}
static function fun(){
echo "A Class\n";
}
}
class B extends A{
static $name = "Jon";
static function fun(){
echo "B Class\n";
}
}
$obj = new B();
$obj->printName();
// 输出结果
// Join
// B Class

大家可以在项目中自行挖掘使用场景,比如一个会员父类  class Vip
下面两个子类分别是 超级会员 svip 和 年费会员 yvip
可以在两个子类中分别重写 static usergroup() 方法 或者其他静态属性 ,父类中使用延迟静态绑定
这样可以写出很优雅的代码

PHP "延迟静态绑定" 功能,static的更多相关文章

  1. PHP延迟静态绑定:static关键字

    PHP5.3中引入了延迟静态绑定的概念.该特性最明显的标志就是新关键字static.static类似于self,但它指的是被调用的类而不是包含类.在本例中,它的意思是调用Document::creat ...

  2. php 延迟静态绑定: static关键字

    abstract class DomainObject { public static function create() { return new self(); } } class User ex ...

  3. PHP延迟静态绑定 static关键字

    示例代码1 abstract class Parent { } class Man extends Parent { public static function create(){ return n ...

  4. php static延迟静态绑定

    如果你是一个懒惰的程序员,你看到以下代码可能会恼火 abstract class U{ } class u1 extends U{ public static function create(){ r ...

  5. php5.3 延迟静态绑定 static关键字

    //传统模式 --这段代码能很好工作,但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧? /* abstract class DomainObject{} class ...

  6. 父类方法返回子类实例:PHP延迟静态绑定

    案例分析 先前的PHP项目中,看到类似于以下的一段代码: <?php class DBHandler { public function get() { } } class MySQLHandl ...

  7. PHP延迟静态绑定

    类可以自下往上调用父类方法,如果需要在父类中根据不同的子类,来调用子类的方法,那么就需要延迟静态绑定.延迟静态绑定用的是保留关键词static. 所谓延迟静态绑定,顾名思义,静态调用时::符号左侧的部 ...

  8. PHP延迟静态绑定(本文属于转发)

    这段时间看项目后台的PHP代码,看到了类似于以下的一段代码,我把它抽出来: <?php class DBHandler { function get() {} } class MySQLHand ...

  9. C# RabbitMQ延迟队列功能实战项目演练

    一.需求背景 当用户在商城上进行下单支付,我们假设如果8小时没有进行支付,那么就后台自动对该笔交易的状态修改为订单关闭取消,同时给用户发送一份邮件提醒.那么我们应用程序如何实现这样的需求场景呢?在之前 ...

随机推荐

  1. 蚂蚁金服寒泉子:JVM源码分析之临门一脚的OutOfMemoryError完全解读

    ➠更多技术干货请戳:听云博客 概述 OutOfMemoryError,说的是java.lang.OutOfMemoryError,是JDK里自带的异常,顾名思义,说的就是内存溢出,当我们的系统内存严重 ...

  2. UITextView 开始编辑时,文字没有左上角对齐解决办法 tableview整体上移

    现实情况如上所示 我出现这种情况的原因有两种: 其一:没有给textview对齐方式: 其二:没有将BOOL类型的“ automaticallyAdjustsScrollViewInsets ”属性置 ...

  3. JavaScript语言精粹(读书笔记)

    第一章 精华 1,JavaScript的函数(主要)基于词法作用域(lexical scoping)的顶级对象.强类型语言允许编译器在编译时检测错误,但弱类型很自由,无需建立复杂的类层次,不用做强制造 ...

  4. iPhone 丢失

    http://www.appvv.com/zhuanti/iccid/ 第一步:iPhone丢失后,及时报警,在最短时间内补办SIM卡或把卡停掉. 第二步:输入查询网址:sn.appvv.com 输入 ...

  5. RHEL 6.6安装桌面环境GNOME

    在测试服务器(Red Hat Enterprise Linux Server release 6.6)需要安装桌面系统环境,于是选择GNOME桌面环境安装. 一:检查系统的运行级别以及是否安装了桌面环 ...

  6. ORACLE调整SGA_TARGET值耗费时间长案例

    在一数据库版本为(标准版)Oracle Database 10g Release 10.2.0.4.0 - 64bit Production 的服务器上调整 sga_target时,遇到命令执行了非常 ...

  7. ansible 初探nginx安装

    我的配置: /etc/hosts: /etc/ansible/hosts: nglinx安装包: ansible自动化安装nginx: 1.安装ansible. 2.创建目录结构: mkdir -p ...

  8. 机器学习实战笔记(Python实现)-00-readme

    近期学习机器学习,找到一本不错的教材<机器学习实战>.特此做这份学习笔记,以供日后翻阅. 机器学习算法分为有监督学习和无监督学习.这本书前两部分介绍的是有监督学习,第三部分介绍的是无监督学 ...

  9. jar命令的用法详解

    本文详细讲述了JAR命令的用法,对于大家学习和总结jar命令的使用有一定的帮助作用.具体如下: JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中 ...

  10. 【转】How to hire——创业公司应该如何招人

    How to hire After startups raise money, their next biggest problem becomes hiring.  It turns out it’ ...