回覆列表
  • 1 # 泰迪神蹟

    /**

    * 獲取一個函式的依賴

    * @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 test($a,$b=20) {

    echo $a,",",$b;

    }

    $depend = getFucntionParameter("test",["a"=>30,"b"=>40]);

    call_user_func_array("test",$depend); // 30,40

    上面的函式是我開發的框架的容器的方法。

    php提供了很完整的反射機制。不但可以反射函式,還可以反射方法,反射類建構函式。

  • 中秋節和大豐收的關聯?
  • 眼袋太重,有什麼方法能夠有效改善呢?