电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP基礎之類和對象20——后期靜態綁定

瀏覽:6日期:2022-09-15 08:00:32

自 PHP 5.3.0 起,PHP 增加了一個叫做后期靜態綁定的功能,用于在繼承范圍內引用靜態調用的類。

準確說,后期靜態綁定工作原理是存儲了在上一個“非轉發調用”(non-forwarding call)的類名。當進行靜態方法調用時,該類名即為明確指定的那個(通常在?::?運算符左側部分);當進行非靜態方法調用時,即為該對象所屬的類。所謂的“轉發調用”(forwarding call)指的是通過以下幾種方式進行的靜態調用:self::,parent::,static::?以及forward_static_call()。可用?get_called_class()?函數來得到被調用的方法所在的類名,static::?則指出了其范圍。

該功能從語言內部角度考慮被命名為“后期靜態綁定”。“后期綁定”的意思是說,static::?不再被解析為定義當前方法所在的類,而是在實際運行時計算的。也可以稱之為“靜態綁定”,因為它可以用于(但不限于)靜態方法的調用。

self::?的限制

使用?self::?或者?__CLASS__?對當前類的靜態引用,取決于定義當前方法所在的類:

Example #1?self::?用法

<?php 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后期靜態綁定的用法

后期靜態綁定本想通過引入一個新的關鍵字表示運行時最初調用的類來繞過限制。簡單地說,這個關鍵字能夠讓你在上述例子中調用?test()?時引用的類是?B?而不是?A。最終決定不引入新的關鍵字,而是使用已經預留的?static?關鍵字。

Example #2?static::?簡單用法

<?php class 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

注意:

在非靜態環境下,所調用的類即為該對象實例所屬的類。由于?$this->?會在同一作用范圍內嘗試調用私有方法,而?static::?則可能給出不同結果。另一個區別是?static::只能用于靜態屬性。

Example #3 非靜態環境下使用?static::

<?php class A {private function foo() { echo 'success!n';}public function test() { $this->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 9

Note:

后期靜態綁定的解析會一直到取得一個完全解析了的靜態調用為止。另一方面,如果靜態調用使用?parent::?或者?self::?將轉發調用信息。

Example #4 轉發和非轉發調用

<?php 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
相關文章:
主站蜘蛛池模板: 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 南京和瑞包装有限公司 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 嘉兴泰东园林景观工程有限公司_花箱护栏 | 不锈钢发酵罐_水果酒发酵罐_谷物发酵罐_山东誉诚不锈钢制品有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 交通气象站_能见度检测仪_路面状况监测站- 天合环境科技 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 | 东莞海恒试验仪器设备有限公司 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 电磁流量计厂家_涡街流量计厂家_热式气体流量计-青天伟业仪器仪表有限公司 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 天坛家具官网|