摘要:開始提供了完整的反射。有反射類和反射函數等,功能大同小異,這里主要以為列說明。什么是反射他是指在運行狀態中,動態的獲取類方法屬性參數注釋等信息和動態調用對象的方法的功能。
PHP5 開始提供了完整的反射API。有反射類(ReflectionClass)和反射函數(ReflectionFunction)等,功能大同小異,這里主要以ReflectionClass為列說明。
什么是反射
他是指PHP在運行狀態中,動態的獲取類、方法、屬性、參數、注釋等信息和動態調用對象的方法的功能。
有什么用
可以幫助我們構建復雜的,可擴的運用。比如自動加載插件,自動生成文檔等
代碼示例
該示例為一個通用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( "請求參數不合未能", 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)));
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28148.html
摘要:反射提供給面向對象編程可以自省的能力,即反射。在簡單工廠模式中,根據傳遞的參數來返回不同的類的實例簡單工廠模式又稱為靜態工廠方法模式。也就是簡單工廠模式工廠工廠類。PHP高級特性-反射以及工廠設計模式的結合使用 [結合 Laravel-Admin 代碼實例講解]利用反射來實現工廠模式的生產而無需創建特定的工廠類本文地址http://janrs.com/?p=833轉載無需經過作者本人授權轉載...
摘要:使自己腳本在網站運行,造成一些列的危險后果。之前說的反射型和存儲型的主要區別在于,存儲型的執行腳本會存儲在數據庫,長期有效。而只是對信息做了驗證,并不能阻止的漏洞。機制和昨天說的反射型一模一樣。 本文由甲爪cpa聯盟(www.jiazhua.com)整理編輯!轉載請注明!環境是PHPWAMP,firefox(火狐沒有xss過濾器)。環境和dvwa如果下載不方便可以評論留郵箱,看到會分享...
摘要:工廠模式,依賴轉移當然,實現控制反轉的方法有幾種。其實我們稍微改造一下這個類,你就明白,工廠類的真正意義和價值了。雖然如此,工廠模式依舊十分優秀,并且適用于絕大多數情況。 此篇文章轉載自laravel-china,chongyi的文章https://laravel-china.org/top...原文地址: http://www.insp.top/learn-lar... ,轉載務必保...
摘要:本文一大半內容都是通過舉例來讓讀者去理解什么是控制反轉和依賴注入,通過理解這些概念,來更加深入。這種由外部負責其依賴需求的行為,我們可以稱其為控制反轉。工廠模式,依賴轉移當然,實現控制反轉的方法有幾種。 容器,字面上理解就是裝東西的東西。常見的變量、對象屬性等都可以算是容器。一個容器能夠裝什么,全部取決于你對該容器的定義。當然,有這樣一種容器,它存放的不是文本、數值,而是對象、對象的描...
摘要:提供了個常用的預定義接口,實現某些特定的能力。是啥如官方文檔所述,它提供像訪問數組一樣訪問對象的能力的接口。它提供了個接口我們實現這個接口,依次對應數組的讀取,設置,操作。用上了它,可以讓一個類即可以支持對象引用,也支持數組引用。 php提供了6個常用的預定義接口,實現某些特定的能力。其中最最常用的就是 ArrayAccess 了,像 Laravel 這種流行的框架都用到了它。 Arr...
閱讀 3521·2021-11-18 10:02
閱讀 952·2021-09-04 16:48
閱讀 2039·2019-08-30 15:55
閱讀 3540·2019-08-30 15:52
閱讀 1816·2019-08-30 14:08
閱讀 3557·2019-08-30 13:19
閱讀 1142·2019-08-27 10:53
閱讀 3122·2019-08-26 12:11