成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【PHP高級特性】之反射

luckyw / 2305人閱讀

摘要:開始提供了完整的反射。有反射類和反射函數(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

相關(guān)文章

  • PHP高級特性-反射Reflection以及Factory工廠設(shè)計模式的結(jié)合使用[代碼實例]

    摘要:反射提供給面向?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)載...

    番茄西紅柿 評論0 收藏2637
  • 網(wǎng)站滲透DVWA存儲型XSS

    摘要:使自己腳本在網(wǎng)站運行,造成一些列的危險后果。之前說的反射型和存儲型的主要區(qū)別在于,存儲型的執(zhí)行腳本會存儲在數(shù)據(jù)庫,長期有效。而只是對信息做了驗證,并不能阻止的漏洞。機制和昨天說的反射型一模一樣。 本文由甲爪cpa聯(lián)盟(www.jiazhua.com)整理編輯!轉(zhuǎn)載請注明!環(huán)境是PHPWAMP,firefox(火狐沒有xss過濾器)。環(huán)境和dvwa如果下載不方便可以評論留郵箱,看到會分享...

    TANKING 評論0 收藏0
  • php實現(xiàn)依賴注入(DI)和控制反轉(zhuǎn)(IOC)

    摘要:工廠模式,依賴轉(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ù)必保...

    tomato 評論0 收藏0
  • 深入理解控制反轉(zhuǎn)(IoC)和依賴注入(DI)

    摘要:本文一大半內(nèi)容都是通過舉例來讓讀者去理解什么是控制反轉(zhuǎn)和依賴注入,通過理解這些概念,來更加深入。這種由外部負責(zé)其依賴需求的行為,我們可以稱其為控制反轉(zhuǎn)。工廠模式,依賴轉(zhuǎn)移當(dāng)然,實現(xiàn)控制反轉(zhuǎn)的方法有幾種。 容器,字面上理解就是裝東西的東西。常見的變量、對象屬性等都可以算是容器。一個容器能夠裝什么,全部取決于你對該容器的定義。當(dāng)然,有這樣一種容器,它存放的不是文本、數(shù)值,而是對象、對象的描...

    HollisChuang 評論0 收藏0
  • PHP高級特性】ArrayAccess 接口

    摘要:提供了個常用的預(yù)定義接口,實現(xiàn)某些特定的能力。是啥如官方文檔所述,它提供像訪問數(shù)組一樣訪問對象的能力的接口。它提供了個接口我們實現(xiàn)這個接口,依次對應(yīng)數(shù)組的讀取,設(shè)置,操作。用上了它,可以讓一個類即可以支持對象引用,也支持數(shù)組引用。 php提供了6個常用的預(yù)定義接口,實現(xiàn)某些特定的能力。其中最最常用的就是 ArrayAccess 了,像 Laravel 這種流行的框架都用到了它。 Arr...

    mrli2016 評論0 收藏0

發(fā)表評論

0條評論

luckyw

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<