博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP "延迟静态绑定" 功能,static
阅读量:4623 次
发布时间:2019-06-09

本文共 1229 字,大约阅读时间需要 4 分钟。

从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法。

第二点延迟绑定,这个根据下面代码就可以很好的理解
看一下这个例子:

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() 方法 或者其他静态属性 ,父类中使用延迟静态绑定
这样可以写出很优雅的代码

转载于:https://www.cnblogs.com/codeAB/p/5560631.html

你可能感兴趣的文章
CentOS下安装mysql及配置使用
查看>>
gevent拾遗
查看>>
Metro学习笔记+心得+体会(四)
查看>>
正则表达式
查看>>
Codeforces Gym 100342H Problem H. Hard Test 构造题,卡迪杰斯特拉
查看>>
C++源码的调用图生成
查看>>
滚动居中效果_带遮罩效果
查看>>
JSP学习总结(一)
查看>>
Sublime Text3配置Vue 语法
查看>>
验证控件:RegularExpressionValidator
查看>>
hdu1166 线段树单点修改与区间查询
查看>>
asp.net -mvc框架复习(7)-基于MVC搭建用户登录项目框架
查看>>
CSS background-clip 属性
查看>>
Windows下msysGit安装
查看>>
python中函数作用域
查看>>
C#版清晰易懂TCP通信原理解析(附demo)
查看>>
系统自带的粒子系统
查看>>
Laravel 框架的主要版本
查看>>
pandas学习笔记 - 常见的数据处理方式
查看>>
Unity3d操作的一些技巧知识点和BUG解决方案
查看>>