最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP進階學(xué)習(xí)之反射基本概念與用法分析

 更新時間:2019年06月18日 10:25:15   作者:George-Henry  
這篇文章主要介紹了PHP進階學(xué)習(xí)之反射基本概念與用法,結(jié)合實例形式分析了php反射的概念、原理基本用法及相關(guān)操作注意事項,需要的朋友可以參考下

本文實例講述了PHP進階學(xué)習(xí)之反射基本概念與用法。分享給大家供大家參考,具體如下:

一、前言

Reflection(反射)是Java程序開發(fā)語言的特征之一,它允許運行中的Java程序?qū)ψ陨磉M行檢查,或者說“自審”,并能直接操作程序的內(nèi)部屬性。這一特征在實際應(yīng)用中也許用得不是很多。

PHP從5.0開始完美支持反射API。PHP反射可以用于觀察并修改程序在運行時的行為。一個面向反射的(reflection-oriented)程序組件可以監(jiān)測一個范圍內(nèi)的代碼執(zhí)行情況,可以根據(jù)期望的目標(biāo)與此相關(guān)的范圍修改本身。PHP5具有完整的反射API,添加了對類、接口、函數(shù)、方法和擴展進行反向工程的能力。

二、概念

反射是指在PHP運行狀態(tài)中,擴展分析PHP程序,導(dǎo)出或提出關(guān)于類、方法、屬性、參數(shù)等的詳細信息,包括注釋。這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為反射API。

三、PHP反射的基本語法

實現(xiàn)反射的方法有很多,可以通過實例化一個專門控制類的ReflectionClass類來實現(xiàn)反射,也可以在已有類實例的情況下,通過直接實例化ReflectionMethod類來執(zhí)行反射方法,原理如圖:

以下是對反射類和反射方法類的基本用法:

1、反射類

(1) $reflectClass = new ReflectionClass(<類名>);

傳入類名字符串,返回控制目標(biāo)類的ReflectionClass類實例;

(2) $reflectClass->getConstant(<常量名>);

傳入類中定義了的常量名,返回常量值,可通過$reflectClass->getConstants返回類中所有定義的常量的數(shù)組;

(3) $class = $reflectClass->newInstance();

實例化類,返回目標(biāo)類實例;也可通過$reflectClass->newInstanceArgs(<參數(shù)數(shù)組>)傳入實例化的構(gòu)造函數(shù)參數(shù)進行實例化;

2、反射方法

(1) $reflectMethod = new ReflectionMethod(<方法名>);

傳入方法名名字符串,返回控制目標(biāo)方法的ReflectionMethod類實例;

(2) $parameters = $reflectMethod->getParameters();

獲取該類所需的參數(shù)名,該方法返回一個包含所有參數(shù)名的二維數(shù)組;

(3) $name = $parameters->getName();

返回要執(zhí)行的方法所需參數(shù)數(shù)組的單個參數(shù)名,可通過foreach循環(huán)逐一獲取和賦值;

(4) $reflectMethod->invokeArgs(<類實例>,<執(zhí)行該方法所需參數(shù)數(shù)組>);

傳入類實例和方法參數(shù),執(zhí)行方法,返回執(zhí)行結(jié)果。

3、反射類和反射方法中其他常用的用法:

ReflectionClass:

ReflectionMethod:

4、除了ReflectionClass和ReflectionMethod,我們對于類中的參數(shù)、屬性和php服務(wù)的環(huán)境變量、擴展等參數(shù)也是可以通過反射API的一些方法來執(zhí)行的,如下:

四、反射在實際應(yīng)用中的使用

1、反射可以用于文檔、文件生成。可以用它對文件里的類進行掃描,逐個生成描述文檔;
2、既然反射可以探知類的內(nèi)部結(jié)構(gòu),那么可以用它做hook實現(xiàn)插件功能
3、可以用于做動態(tài)代理,在未知或者不確定類名的情況下,動態(tài)生成和實例化一些類和執(zhí)行方法;
4、對于多次繼承的類,我們可以通過多次反射探索到基類的結(jié)構(gòu),或者采用遞歸的形式反射,實現(xiàn)實例化所有繼承類,這即是PHP依賴注入的原理。

五、PHP反射的優(yōu)缺點

優(yōu)點

1、支持反射的語言提供了一些在低級語言中難以實現(xiàn)的運行時特性。
2、可以在一定程度上避免硬編碼,提供靈活性和通用性。
3、可以作為一個第一類對象發(fā)現(xiàn)并修改源代碼的結(jié)構(gòu)(如代碼塊、類、方法、協(xié)議等)。
4、可以在運行時像對待源代碼語句一樣計算符號語法的字符串(類似JavaScript的eval()函數(shù)),進而可將跟class或function匹配的字符串轉(zhuǎn)換成class或function的調(diào)用或引用。
5、可以創(chuàng)建一個新的語言字節(jié)碼解釋器來給編程結(jié)構(gòu)一個新的意義或用途。

劣勢

1、此技術(shù)的學(xué)習(xí)成本高。面向反射的編程需要較多的高級知識,包括框架、關(guān)系映射和對象交互,以利用更通用的代碼執(zhí)行。
2、同樣因為反射的概念和語法都比較抽象,過多地濫用反射技術(shù)會使得代碼難以被其他人讀懂,不利于合作與交流。
3、由于將部分信息檢查工作從編譯期推遲到了運行期,此舉在提高了代碼靈活性的同時,犧牲了一點點運行效率。
4、通過深入學(xué)習(xí)反射的特性和技巧,它的劣勢可以盡量避免,但這需要許多時間和經(jīng)驗的積累。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • PHP基于socket實現(xiàn)的簡單客戶端和服務(wù)端通訊功能示例

    PHP基于socket實現(xiàn)的簡單客戶端和服務(wù)端通訊功能示例

    這篇文章主要介紹了PHP基于socket實現(xiàn)的簡單客戶端和服務(wù)端通訊功能,可實現(xiàn)服務(wù)端接收客戶端發(fā)送的字符串進行翻轉(zhuǎn)操作后返回客戶端的功能,需要的朋友可以參考下
    2017-07-07
  • PHP+MYSQL 出現(xiàn)亂碼的解決方法

    PHP+MYSQL 出現(xiàn)亂碼的解決方法

    在之前的文章里,我已經(jīng)提過如何解決JSP中亂碼問題(解決tomcat下中文亂碼問題 ),其中也詳細解說了MYSQL亂碼問題,相信通過里面的辦法,
    2008-08-08
  • php運行時動態(tài)創(chuàng)建函數(shù)的方法

    php運行時動態(tài)創(chuàng)建函數(shù)的方法

    這篇文章主要介紹了php運行時動態(tài)創(chuàng)建函數(shù)的方法,涉及php流程語句與create_function函數(shù)的使用技巧,需要的朋友可以參考下
    2015-03-03
  • php常用日期時間函數(shù)實例小結(jié)

    php常用日期時間函數(shù)實例小結(jié)

    這篇文章主要介紹了php常用日期時間函數(shù),結(jié)合實例形式總結(jié)分析了php日期時間相關(guān)的時間戳、格式化、時區(qū)獲取與設(shè)置、時間戳轉(zhuǎn)換與計算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • php采用ajax數(shù)據(jù)提交post與post常見方法總結(jié)

    php采用ajax數(shù)據(jù)提交post與post常見方法總結(jié)

    這篇文章主要介紹了php采用ajax數(shù)據(jù)提交post與post常見方法,實例總結(jié)了json格式傳遞數(shù)據(jù)的優(yōu)點并總結(jié)了四種常見的POST提交數(shù)據(jù)方式,需要的朋友可以參考下
    2014-11-11
  • php magic_quotes_gpc的一點認識與分析

    php magic_quotes_gpc的一點認識與分析

    最近一直在做一個文章發(fā)布系統(tǒng),做了改,改了做,一直到現(xiàn)在還沒竣工.... 為了達到更好的兼容性,其中的程序涉及到了magic_quotes_gpc,看了下手冊,又找了些資料,分析了下,分享給大家。
    2008-08-08
  • PHP生成唯一的促銷/優(yōu)惠/折扣碼(附源碼)

    PHP生成唯一的促銷/優(yōu)惠/折扣碼(附源碼)

    每一個電子商務(wù)網(wǎng)站,現(xiàn)在有一種或多種類型的優(yōu)惠/折扣/優(yōu)惠券系統(tǒng),給大家分享一下如何在PHP生成唯一的促銷/折扣碼;因此,今天將討論這樣一個優(yōu)惠碼的實現(xiàn)過程,需要了解的朋友可以參考下
    2012-12-12
  • 有關(guān)PHP性能優(yōu)化的介紹

    有關(guān)PHP性能優(yōu)化的介紹

    本篇文章是對PHP性能優(yōu)化進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP中=>和->以及::符號的用法

    PHP中=>和->以及::符號的用法

    講完了php基礎(chǔ)運算符,下面再講一下,php新手經(jīng)常碰到的問題,->、=> 和 :: 這三個家伙是什么分別都是做什么的啊!看著就很暈
    2021-09-09
  • PHP七種數(shù)據(jù)類型知識點總結(jié)

    PHP七種數(shù)據(jù)類型知識點總結(jié)

    在本篇文章里小編給大家分享的是一篇關(guān)于PHP七種數(shù)據(jù)類型知識點內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2020-01-01

最新評論

天门市| 汉沽区| 延川县| 广宗县| 灯塔市| 宾阳县| 桂阳县| 威远县| 临沭县| 罗源县| 凤山市| 应城市| 和顺县| 巩留县| 永城市| 天峻县| 云和县| 莎车县| 嵊泗县| 云阳县| 柏乡县| 石柱| 张家港市| 凌海市| 龙游县| 陆川县| 兰坪| 玉林市| 湘阴县| 贵港市| 湘潭县| 镇雄县| 南丹县| 兴隆县| 宝坻区| 秭归县| 定边县| 鹤峰县| 望都县| 桑日县| 岚皋县|