php擷取函數參數,擷取類裡面的方法名____函數

來源:互聯網
上載者:User
有時候我們需要擷取函數需要傳入的參數,可以利用php的反射函數擷取,或者類裡面的所有公開的方法。 1、擷取函數參數名稱:
function getFucntionParameterName($func) {    $ReflectionFunc = new \ReflectionFunction($func);    $depend = array();    foreach ($ReflectionFunc->getParameters() as $value) {        $depend[] = $value->name;    }    return $depend;}function test($a, $c, $b, $d = 20) {}$paramName = getFucntionParameterName('test');print_r($paramName);
結果如下:

2、擷取類裡面的所有公用方法名:

<?phpclass GetNames {/** * 擷取一個函數的依賴 * @param  string|callable $func * @param  array  $param 調用方法時所需參數 形參名就是key值 * @return array  返回方法調用所需依賴 */    function getFucntionParameter($func, $param = []) {        if (!is_array($param)) {            $param = [$param];        }        $ReflectionFunc = new \ReflectionFunction($func);        $depend = array();        foreach ($ReflectionFunc->getParameters() as $value) {            if (isset($param[$value->name])) {                $depend[] = $param[$value->name];            } elseif ($value->isDefaultValueAvailable()) {                $depend[] = $value->getDefaultValue();            } else {                $tmp = $value->getClass();                if (is_null($tmp)) {                    throw new \Exception("Function parameters can not be getClass {$class}");                }                $depend[] = $this->get($tmp->getName());            }        }        return $depend;    }    //擷取方法裡面的參數名    function getFucntionParameterName($func) {        $ReflectionFunc = new \ReflectionFunction($func);        $names = array();        foreach ($ReflectionFunc->getParameters() as $value) {            $names[] = $value->name;        }        return $names;    }    private function _test($a, $c, $b, $d = 20) {    }}function test1($a, $b, $c) {}$new = new GetNames();$names = $new->getFucntionParameterName('test1');$methords = get_class_methods('GetNames');echo "<pre>";print_r($names);print_r($methords);echo "</pre>";

參考:

http://www.php.net/manual/zh/book.reflection.php

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.