iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php实现后期静态绑定的方法
  • 526
分享到

php实现后期静态绑定的方法

2024-04-02 19:04:59 526人浏览 八月长安
摘要

这篇文章主要介绍了PHP实现后期静态绑定的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。后期静态绑定工作原理是存储了在上一个“非转发调用”(

这篇文章主要介绍了PHP实现后期静态绑定的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类。

所谓的“转发调用”(forwarding  call)指的是通过以下几种方式进行的静态调用:self::parent::static:: 以及forward_static_call() 。可用 get_called_class()函数来得到被调用的方法所在的类名,static:: 则指出了其范围。

self:: 的限制

使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类:

例:

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

B :: test ();

结果:

A
static(后期静态绑定)

后期静态绑定本想通过引入一个新的关键字表示运行时最初调用的类来绕过限制。简单地说,这个关键字能够让你在上述例子中调用 test() 时引用的类是 B 而不是 A。最终决定不引入新的关键字,而是使用已经预留的 static 关键字。

例:

<?phpclass A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who(); // 后期静态绑定从这里开始
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();?>

结果:

B
static 和 $this 的区别

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

例:调用私有方法

<?phpclass A {
    private function foo() {
        echo "success!\n";
    }    public function test() {
        $this->foo();        static::foo();
    }
}class B extends A {
   }class C extends A {
    private function foo() {
        
    }
}$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 9
转发和非转发调用

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

例:

class A {
    public static function foo() {
        static::who();
    }    public static function who() {
        echo __CLASS__."\n";
    }
}class B extends A {
    public static function test() {
        A::foo();        parent::foo();        self::foo();
    }    public static function who() {
        echo __CLASS__."\n";
    }
}class C extends B {
    public static function who() {
        echo __CLASS__."\n";
    }
}

C::test();

结果:

ACC

感谢你能够认真阅读完这篇文章,希望小编分享php实现后期静态绑定的方法内容对大家有帮助,同时也希望大家多多支持编程网,关注编程网PHP编程频道,遇到问题就找编程网,详细的解决方法等着你来学习!

--结束END--

本文标题: php实现后期静态绑定的方法

本文链接: https://www.lsjlt.com/news/53014.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php实现后期静态绑定的方法
    这篇文章主要介绍了php实现后期静态绑定的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。后期静态绑定工作原理是存储了在上一个“非转发调用”(...
    99+
    2022-10-18
  • PHP后期静态绑定的示例分析
    小编给大家分享一下PHP后期静态绑定的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基础知识1. 范围解析操作符 (::...
    99+
    2022-10-19
  • 后期静态绑定在PHP中的使用示例
    这篇“后期静态绑定在PHP中的使用示例”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“后期静态绑定在PHP中的使用示例”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下...
    99+
    2023-06-06
  • PHP中使用后期静态绑定的示例分析
    这篇文章给大家分享的是有关PHP中使用后期静态绑定的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。后期静态绑定在PHP中的使用什么叫后期静态绑定呢?其实我们在之前的文章PHP中的static中已经说过这个...
    99+
    2023-06-15
  • Linux实现301重定向和伪静态方法
    在网上查询了一下还没有人分享linux主机如何通过.htaccess文件同时实现301重定向和伪静态的,为帮助朋友少走弯路,特以把经验分享一下。 用PW做了一个新站,备案审核通过,百度、Google也均已收录。但有个问题...
    99+
    2022-06-04
    Linux 301 伪静态
  • python中绑定方法与非绑定方法的实现示例
    目录一:绑定方法:其特点是调用方本身自动作为第一个参数传入二:非绑定方法,静态方法一:绑定方法:其特点是调用方本身自动作为第一个参数传入 1.绑定到对象的方法:调用方是一个对象,该对...
    99+
    2022-11-12
  • Vue绑定class和绑定内联样式的实现方法
    目录绑定class绑定内联样式绑定class 方式一: 对象语法:给 v-bind:class传 一个对象,以动态地切换 class 当对象中某key对应的值为true时,该ke...
    99+
    2022-11-12
  • webpack实现静态资源缓存的方法
    目录引言区分一下几种不同的hashhashchunkhashcontenthash实现js缓存CommonsChunkPlugin不正确用法引起问题的原因实现css的缓存实现图片/字...
    99+
    2022-11-12
  • 深入探讨PHP私有静态方法的定义和使用
    PHP是一种非常流行的编程语言,经常用于Web应用程序开发。在PHP中,可以使用静态方法来执行一些与类相关的任务,而私有静态方法则是PHP面向对象编程中的一种特殊类型。在本文中,我们将深入探讨PHP私有静态方法的用途、如何定义和使用,以及它...
    99+
    2023-05-14
    私有静态方法 php
  • Android实现静态广播监听器的方法
    本文实例讲述了Android实现静态广播监听器的方法。分享给大家供大家参考。具体实现方法如下: package lab.sodino.broadcastaction; imp...
    99+
    2022-06-06
    监听 方法 静态 监听器 Android
  • ES6中如何实现Class类的静态方法
    这篇文章给大家分享的是有关ES6中如何实现Class类的静态方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个...
    99+
    2022-10-19
  • vue实现双向绑定的方法有哪些
    在vue中实现双向绑定的方法有:1.使用v-model指令实现;2.利用.sync修饰符实现;3.使用model属性实现;在vue中实现双向绑定的方法有以下几种使用v-model指令实现双向绑定<input v-model=...
    99+
    2022-10-17
  • C语言动态与静态分别实现通讯录的方法
    这篇文章主要讲解了“C语言动态与静态分别实现通讯录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言动态与静态分别实现通讯录的方法”吧!一.静态通讯录的实现1.环境的分工逻辑由于过程...
    99+
    2023-06-29
  • java接口中静态方法的继承怎么实现
    这篇文章主要讲解了“java接口中静态方法的继承怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java接口中静态方法的继承怎么实现”吧!1、格式public static返...
    99+
    2023-06-30
  • Android实现编程修改手机静态IP的方法
    本文实例讲述了Android实现编程修改手机静态IP的方法。分享给大家供大家参考。具体如下: 这里演示通过编程方式动态修改手机静态IP的方法,可以用于wifi接入点切换 pu...
    99+
    2022-06-06
    ip 方法 静态ip 手机 Android
  • Apache开启并实现网站伪静态化的方法
    配置步骤: 第一步:找到apache的配置文件httpd.conf(文件在conf目录下,linux系统路径一般为 /etc/httpd/conf/httpd.conf) 第二步:你首先必须得让服务器支持mod_rewr...
    99+
    2022-08-23
  • React State状态与生命周期的实现方法
    一、实现组件的方法: 组件名称首字母必须大写 1.通过JS函数方式实现组件 <div id="app"></div> <script type="t...
    99+
    2022-11-11
  • 小程序实现事件绑定的方法步骤
    目录1 事件1.1 小程序中常用的事件1.2 事件对象的属性列表1.2.1 target 和 currentTarget 的区别1.3 bindtap 的语法格式1.4 在事件处理函...
    99+
    2022-11-13
  • Vue.js中class与style的增强绑定实现方法
    目录一、v-bind绑定class属性(1)绑定class样式,字符串写法(2)绑定class样式,数组写法(3)绑定class样式,对象写法二、v-bind绑定内联样式style(...
    99+
    2023-05-16
    Vue.js class与style绑定 Vue.js class与style
  • android使用Messenger绑定Service的多种实现方法
    如果你需要在不同进程间通信,你可以在Service中使用Messenger来实现进程中通信。 如果使用这种方式,Service中需要定义一个Handler对象(负责对客户端发送...
    99+
    2022-06-06
    messenger service 方法 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作