百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP类与对象后期静态绑定操纵实例详解
分享文章到:

PHP类与对象后期静态绑定操纵实例详解

发布时间:05/20 来源:未知 浏览: 关键词:

本文实例讲述了PHP类与对象后期静态绑定操纵。分享给大家供大家参考,详细如下:

做项目是后期静态绑定非常有用。比方service层单例模式,使用后期静态绑定就非常好实现。

自 PHP 5.3.0 起,PHP 增添了一个叫做后期静态绑定的功效,用于在继承范畴内援用静态调用的类。

准确说,后期静态绑定工作道理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当停止静态办法调用时,该类名即为明白指定的那个(平常在 :: 运算符左侧部分);当停止非静态办法调用时,即为该对象所属的类。所谓的“转发调用”(forwarding call)指的是通过以下几种方式停止的静态调用:self::parent::static:: 以及 forward_static_call()。可用 get_called_class() 函数来得到被调用的办法所在的类名,static:: 则指出了其范畴。

该功效从说话内部角度思考被命名为“后期静态绑定”。“后期绑定”的意思是说,static:: 不再被解析为定义当前办法所在的类,而是在实际运转时计算的。也可以称之为“静态绑定”,由于它可以用于(但不限于)静态办法的调用。



以上例程会输出:

B

Note:

在非静态环境下,所调用的类即为该对象实例所属的类。由于 $this-> 会在统一作用范畴内尝试调用私有办法,而 static:: 则大概给出不一样结果。另一个区别是 static:: 只能用于静态属性。

Example #3 非静态环境下使用 static::

foo();
    static::foo();
  }
}
class B extends A {
  /* foo() will be copied to B, hence its scope will still be A and
  * the call be successful */
}
class C extends A {
  private function foo() {
    /* original method is replaced; the scope of the new one is C */
  }
}
$b = new B();
$b->test();
$c = new C();
$c->test();  //fails
?>

以上例程会输出:

success!
success!
success!
Fatal error: Call to private method C::foo() from context ‘A' in /tmp/test.php on line 7

Note:

后期静态绑定的解析会不断到取得一个完全解析了的静态调用为止。另一方面,如果静态调用使用 parent:: 或者 self:: 将转发调用信息。

Example #4 转发和非转发调用



打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有159人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板