有時候我們需要擷取函數需要傳入的參數,可以利用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