PHP "延迟静态绑定" 功能,static
来源:互联网 发布:搜索软件哪个最好 编辑:程序博客网 时间:2024/05/17 23:26
PHP "延迟静态绑定" 功能,static
从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法。
第二点延迟绑定,这个根据下面代码就可以很好的理解
看一下这个例子:
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() 方法 或者其他静态属性 ,父类中使用延迟静态绑定
这样可以写出很优雅的代码
0 0
- PHP 延迟静态绑定 功能 static
- PHP "延迟静态绑定" 功能,static
- PHP静态延迟绑定:static
- static延迟静态绑定
- php 静态延迟绑定
- PHP延迟静态绑定
- PHP延迟静态绑定
- PHP延迟静态绑定
- PHP延迟静态绑定
- PHP延迟静态绑定
- PHP延迟静态绑定
- 【学习点滴-php】static关键字---延迟静态绑定
- PHP面向对象:延迟静态绑定(static关键字)
- php面对对象之延迟静态绑定:static关键字
- php之static后期绑定/延迟绑定
- php的延迟静态绑定
- php的延迟静态绑定
- php的延迟静态绑定
- Qt入门-layout布局
- MAVEN项目标准目录结构
- ElemType是什么数据类型?
- git am *.patch err: has type 100644, expected 100755
- Maven内置了三大特性:属性、Profile和资源过滤来支持构建的灵活性。
- PHP "延迟静态绑定" 功能,static
- maven修改远程和本地仓库地址
- 继电器工作原理
- 搭建Nginx+Java环境
- 总体设计的原则
- Session传值
- lx010手机号码验证
- 详解Unity 5 全局光照系统Enlighten问题(上)
- HDU 4007 Dave