摘要:開始提供了完整的反射。有反射類和反射函數(shù)等,功能大同小異,這里主要以為列說明。什么是反射他是指在運行狀態(tài)中,動態(tài)的獲取類方法屬性參數(shù)注釋等信息和動態(tài)調(diào)用對象的方法的功能。
PHP5 開始提供了完整的反射API。有反射類(ReflectionClass)和反射函數(shù)(ReflectionFunction)等,功能大同小異,這里主要以ReflectionClass為列說明。
什么是反射
他是指PHP在運行狀態(tài)中,動態(tài)的獲取類、方法、屬性、參數(shù)、注釋等信息和動態(tài)調(diào)用對象的方法的功能。
有什么用
可以幫助我們構(gòu)建復(fù)雜的,可擴的運用。比如自動加載插件,自動生成文檔等
代碼示例
該示例為一個通用API入口
HttpApi.php
namespace twinkleservicehttp; class HttpApi { private $class; public function __construct($class) { $this->class = $class; } public function parseRequest($method,$params = []) { $class = new ReflectionClass($this->class); $instance = $class->newInstanceArgs($params); $method = $class->getMethod($method); $args = []; foreach ($method->getParameters() as $param) { $name = $param->getName(); if (isset($params[$name])) { $args[$name] = $params[$name]; } else { try { $args[$name] = $param->getDefaultValue(); } catch (Exception $e) { throw new RequestException( "請求參數(shù)不合未能", 500 ); } } } return [$instance,$method,$args]; } }
NotFoundService.php
namespace appservices; use appaseService; class NotFoundService extends Service { public function error() { return $this->format(["status" => 1, "msg" => "請求不合法,請確認service和method是否存在"]); } }
使用范例
$params = $_REQUEST; $serviceName= isset($params["service"]) ? $params["service"] : "NotFound"; $methodName= isset($params["method"]) ? $params["method"] : "error"; $class = "appservices" . Str::ucWords($serviceName) . "Service"; list($instance, $method, $args) = (new HttpApi($class))->parseRequest($methodName, $params); echo json_encode(($method->invokeArgs($instance, $args)));
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28148.html
摘要:反射提供給面向?qū)ο缶幊炭梢宰允〉哪芰Γ捶瓷?。在簡單工廠模式中,根據(jù)傳遞的參數(shù)來返回不同的類的實例簡單工廠模式又稱為靜態(tài)工廠方法模式。也就是簡單工廠模式工廠工廠類。PHP高級特性-反射以及工廠設(shè)計模式的結(jié)合使用 [結(jié)合 Laravel-Admin 代碼實例講解]利用反射來實現(xiàn)工廠模式的生產(chǎn)而無需創(chuàng)建特定的工廠類本文地址http://janrs.com/?p=833轉(zhuǎn)載無需經(jīng)過作者本人授權(quán)轉(zhuǎn)載...
摘要:使自己腳本在網(wǎng)站運行,造成一些列的危險后果。之前說的反射型和存儲型的主要區(qū)別在于,存儲型的執(zhí)行腳本會存儲在數(shù)據(jù)庫,長期有效。而只是對信息做了驗證,并不能阻止的漏洞。機制和昨天說的反射型一模一樣。 本文由甲爪cpa聯(lián)盟(www.jiazhua.com)整理編輯!轉(zhuǎn)載請注明!環(huán)境是PHPWAMP,firefox(火狐沒有xss過濾器)。環(huán)境和dvwa如果下載不方便可以評論留郵箱,看到會分享...
摘要:工廠模式,依賴轉(zhuǎn)移當(dāng)然,實現(xiàn)控制反轉(zhuǎn)的方法有幾種。其實我們稍微改造一下這個類,你就明白,工廠類的真正意義和價值了。雖然如此,工廠模式依舊十分優(yōu)秀,并且適用于絕大多數(shù)情況。 此篇文章轉(zhuǎn)載自laravel-china,chongyi的文章https://laravel-china.org/top...原文地址: http://www.insp.top/learn-lar... ,轉(zhuǎn)載務(wù)必保...
摘要:本文一大半內(nèi)容都是通過舉例來讓讀者去理解什么是控制反轉(zhuǎn)和依賴注入,通過理解這些概念,來更加深入。這種由外部負責(zé)其依賴需求的行為,我們可以稱其為控制反轉(zhuǎn)。工廠模式,依賴轉(zhuǎn)移當(dāng)然,實現(xiàn)控制反轉(zhuǎn)的方法有幾種。 容器,字面上理解就是裝東西的東西。常見的變量、對象屬性等都可以算是容器。一個容器能夠裝什么,全部取決于你對該容器的定義。當(dāng)然,有這樣一種容器,它存放的不是文本、數(shù)值,而是對象、對象的描...
摘要:提供了個常用的預(yù)定義接口,實現(xiàn)某些特定的能力。是啥如官方文檔所述,它提供像訪問數(shù)組一樣訪問對象的能力的接口。它提供了個接口我們實現(xiàn)這個接口,依次對應(yīng)數(shù)組的讀取,設(shè)置,操作。用上了它,可以讓一個類即可以支持對象引用,也支持數(shù)組引用。 php提供了6個常用的預(yù)定義接口,實現(xiàn)某些特定的能力。其中最最常用的就是 ArrayAccess 了,像 Laravel 這種流行的框架都用到了它。 Arr...
閱讀 3528·2021-11-18 10:02
閱讀 963·2021-09-04 16:48
閱讀 2047·2019-08-30 15:55
閱讀 3553·2019-08-30 15:52
閱讀 1825·2019-08-30 14:08
閱讀 3568·2019-08-30 13:19
閱讀 1155·2019-08-27 10:53
閱讀 3134·2019-08-26 12:11