ReflectionFunction 反射函数

最后更新于:2022-04-02 02:31:18

[TOC] ## 概述 继承了 ReflectionFunctionAbstract ## 语法 ``` ReflectionFunction::__construct — Constructs a ReflectionFunction object ReflectionFunction::export — Exports function ReflectionFunction::getClosure — Returns a dynamically created closure for the function ReflectionFunction::invoke — Invokes function ReflectionFunction::invokeArgs — Invokes function args ReflectionFunction::isDisabled — Checks if function is disabled ReflectionFunction::__toString — To string ``` ## 示例 ### Hello World ``` function A($a1='',$a2=''){ return $a1.$a2; } $r = new ReflectionFunction("A"); var_dump($r->getName()); // A var_dump($r->getNumberOfParameters()); // 2 var_dump($r->invokeArgs(["hello","world"])); // helloworld var_dump($r->invoke("hello","world")); // helloworld ``` ### 判断函数,可选与否 ``` $argsArr = [ 'name' => 'Anderson Lucas Silva de Oliveira', 'age' => 21, 'hobbie' => 'Play games' ]; function processUserData($name, $age, $job = "", $hobbie = "") { $msg = "Hello $name. You have $age years old"; if (!empty($job)) { $msg .= ". Your job is $job"; } if (!empty($hobbie)) { $msg .= ". Your hobbie is $hobbie"; } echo $msg . "."; } $refFunction = new ReflectionFunction('processUserData'); $parameters = $refFunction->getParameters(); $validParameters = []; foreach ($parameters as $parameter) { // 缺少不可选函数 if (!array_key_exists($parameter->getName(), $argsArr) && !$parameter->isOptional()) { throw new DomainException('Cannot resolve the parameter' . $parameter->getName()); } // 缺少可选函数,跳过 if(!array_key_exists($parameter->getName(), $argsArr)) { continue; } $validParameters[$parameter->getName()] = $argsArr[$parameter->getName()]; } $refFunction->invoke(...$validParameters) ```
';