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

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了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中如何使用后期静态绑定

相关文章

  • 2022-04-29WordPress使用OSS Upload后媒体库无法加载一直转圈解决方法
  • 2022-04-29CSS3怎么实现动画结束不消失效果
  • 2022-04-29nginx报错502怎么办?解决方案分享
  • 2022-04-29PS鼠绘红润的美少女
  • 2022-04-29dedecms大量删除文章后,列表页显示错误修复办法
  • 2022-04-29PHP怎么设置上传图片大小
  • 2022-04-29帝国CMS7.5使用TAGSID实现伪静态调用方法
  • 2022-04-29Coreldraw简单制作质感的图标
  • 2022-04-29详解php中的str_replace()(附代码实例)
  • 2022-04-29宝塔2.x面板文件不小心被误删或损坏的修复方法

文章分类

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

最近更新的内容

    • 浅谈Bootstrap Tab标签页切换图表显示问题的解决方法
    • dedecms列表页图片加ALT描述的完美方式
    • Photoshop制作创意的云朵图案艺术字教程
    • Photoshop制作海底以透明泡泡组成的艺术字
    • 设计师应该从四个方面优化网站
    • 说说在Laravel中怎么执行Shell命令 ?
    • Photoshop制作复古黄金文字效果
    • 浅析如何从小程序跳到H5页面/微信小程序跳转到H5页面实例解析
    • WordPress如何插入视频?WP文章插入视频代码方法
    • Apache Log4j 2.17.0已发布!看看解决了什么问题?

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

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