成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【PHP高級(jí)特性】之反射

luckyw / 2351人閱讀

摘要:開始提供了完整的反射。有反射類和反射函數(shù)等,功能大同小異,這里主要以為列說明。什么是反射他是指在運(yùn)行狀態(tài)中,動(dòng)態(tài)的獲取類方法屬性參數(shù)注釋等信息和動(dòng)態(tài)調(diào)用對(duì)象的方法的功能。

PHP5 開始提供了完整的反射API。有反射類(ReflectionClass)和反射函數(shù)(ReflectionFunction)等,功能大同小異,這里主要以ReflectionClass為列說明。

什么是反射
他是指PHP在運(yùn)行狀態(tài)中,動(dòng)態(tài)的獲取類、方法、屬性、參數(shù)、注釋等信息和動(dòng)態(tài)調(diào)用對(duì)象的方法的功能。

有什么用
可以幫助我們構(gòu)建復(fù)雜的,可擴(kuò)的運(yùn)用。比如自動(dòng)加載插件,自動(dòng)生成文檔等

代碼示例
該示例為一個(gè)通用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(
                        "請(qǐng)求參數(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" => "請(qǐng)求不合法,請(qǐng)確認(rèn)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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/28148.html

相關(guān)文章

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

    摘要:反射提供給面向?qū)ο缶幊炭梢宰允〉哪芰?,即反射。在?jiǎn)單工廠模式中,根據(jù)傳遞的參數(shù)來返回不同的類的實(shí)例簡(jiǎn)單工廠模式又稱為靜態(tài)工廠方法模式。也就是簡(jiǎn)單工廠模式工廠工廠類。PHP高級(jí)特性-反射以及工廠設(shè)計(jì)模式的結(jié)合使用 [結(jié)合 Laravel-Admin 代碼實(shí)例講解]利用反射來實(shí)現(xiàn)工廠模式的生產(chǎn)而無需創(chuàng)建特定的工廠類本文地址http://janrs.com/?p=833轉(zhuǎn)載無需經(jīng)過作者本人授權(quán)轉(zhuǎn)載...

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

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

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

    摘要:工廠模式,依賴轉(zhuǎn)移當(dāng)然,實(shí)現(xiàn)控制反轉(zhuǎn)的方法有幾種。其實(shí)我們稍微改造一下這個(gè)類,你就明白,工廠類的真正意義和價(jià)值了。雖然如此,工廠模式依舊十分優(yōu)秀,并且適用于絕大多數(shù)情況。 此篇文章轉(zhuǎn)載自laravel-china,chongyi的文章https://laravel-china.org/top...原文地址: http://www.insp.top/learn-lar... ,轉(zhuǎn)載務(wù)必保...

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

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

    HollisChuang 評(píng)論0 收藏0
  • PHP高級(jí)特性】ArrayAccess 接口

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

    mrli2016 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<