• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 在PHP中如何使用后期静态绑定

在PHP中如何使用后期静态绑定

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了PHP中如何使用,PHP后期静态绑定等相关知识,希望对您有所帮助

本篇文章给大家介绍一下在PHP中使用后期静态绑定的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。


在PHP中如何使用后期静态绑定


后期静态绑定在PHP中的使用

什么叫后期静态绑定呢?其实我们在之前的文章PHP中的static中已经说过这个东西了。今天我们还是再次深入的理解一下这个概念。

首先,我们通过一段代码来引入后期静态绑定这一概念:

class A{    public static function who()    {        echo __CLASS__, PHP_EOL;    }    public static function test()    {        self::who();    }} class B extends A{    public static function who()    {        echo __CLASS__, PHP_EOL;    }} B::test(); // A

在这段代码中,我们使用了self关键字,当使用B类调用test()静态方法时,self指向的是A类的who()方法,因此,输出的是A。别激动,这是普通的静态绑定。self关键字调用的内容取决于它定义时所在的类。也就是说不管怎么继承,用哪个子类来调用test()方法,self关键字都会调用的是A类的who()方法。

而后期静态绑定呢?其实就有点像实例化的类对象,每个实例化的对象,调用的都是自身,而不是父类的属性方法。普通的静态调用可不是这样,但是现实中我们又有这样的需求,就像实例化对象的调用方式一样来调用静态属性方法,这时,我们就可以使用static关键字来实现后期静态绑定。

class C{    public static function who()    {        echo __CLASS__, PHP_EOL;    }    public static function test()    {        static::who();    }} class D extends C{    public static function who()    {        echo __CLASS__, PHP_EOL;    }} D::test(); // D

当使用static关键字后,这里D类调用的test()方法内部调用的who()就是D类自己了。

官方文档中的定义如下:

当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类。

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

除了self和static关键字外,我们还有一个parent关键字,这个关键字的意义就很明显了,调用父类的静态内容。我们同时用三个关键字一起来进行测试:

class E{    public static function who()    {        echo __CLASS__, PHP_EOL;    }    public static function test()    {        self::who();        static::who();    }} class F extends E{    public static function who()    {        echo __CLASS__, PHP_EOL;    }} class G extends F{    public static function who()    {        parent::who();        echo __CLASS__, PHP_EOL;    }} G::test(); // E// F// G

最后,我们再来看两个PHP的方法,一个是get_called_class()方法,用来获取当前调用的是哪个类。在静态方法中可以根据调用方式判断当前类是哪个类来进行其他的业务逻辑操作。另一个是forward_static_call()方法,用于静态方法的调用。

class H{    public static function who()    {        echo __CLASS__ . ':' . join(',', func_get_args()), PHP_EOL;    }    public static function test()    {        echo get_called_class(), PHP_EOL;        forward_static_call('who', 'a', 'b'); // xxx:a,b        forward_static_call(['I', 'who'], 'c', 'd'); // I:c,d        forward_static_call_array(['H', 'who'], ['e', 'f']); // H:e,f    }} class I extends H{    public static function who()    {        echo __CLASS__ . ':' . join(',', func_get_args()), PHP_EOL;    }} function who(){    echo 'xxx:' . join(',', func_get_args()), PHP_EOL;} H::test(); // H// xxx:a,b// I:c,d// H:e,fI::test(); // I// xxx:a,b// I:c,d// H:e,f

注意,如果forward_static_call()不指定类名的话,将调用全局的方法。forward_static_call_array()则是将参数使用数组进行传递。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在PHP中如何使用后期静态绑定

相关文章

  • Photoshop绘制十二生肖按钮图标教程
  • Photoshop制作渐变色导航背景
  • Illustrator制作质感水晶球教程
  • Photoshop绘制金属质感的钢铁侠头像
  • PS打造线描风格舞者壁纸平面作品设计制作教程
  • 纯CSS使图片有放大效果代码
  • phpcms显示验证码出错怎么办?
  • 推荐几个常用的wordpress图片自动加水印插件
  • 浅谈小程序怎么实现列表滚动上下联动效果
  • Thinkphp学习之路由定义 伪静态规则(总结分享)

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • javascript如何解决url中文乱码问题
    • div在屏幕中如何实现水平居中和垂直居中
    • PHPCMS系统mysql优化教程
    • 浅谈bootstrapTable+jstree插件对树列表条件和查询条件的处理
    • vue中data改变后让视图同步更新的方法
    • 利用图层样式及素材制作漂亮的火焰字
    • PhotoShop设计制作梦幻炫彩光斑文字效果教程
    • Photoshop详细解析斜面浮雕和等高线原理
    • ThinkPHP5框架中Redis是如何使用和封装?
    • 为网站选择一个适当的DMOZ目录

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有