Ren*_*gen 6 php arrays reflection null
我有这个方法:
public function search($searchKey=null, $summary=null, $title=null, $authors=null, $paginationPage=0) {
...
}
Run Code Online (Sandbox Code Playgroud)
我正试图用这个检索所有参数:
$Class = new Search();
// Get parameters
$ReflectionMethod = new \ReflectionMethod($Class, "search");
try {
foreach($ReflectionMethod->getParameters() AS $Parameter) {
if(array_key_exists($Parameter->name, $this->params)) {
$parameters[$Parameter->name] = $this->params[$Parameter->name];
} elseif($Parameter->isDefaultValueAvailable()) {
$paramaters[$Parameter->name] = $Parameter->getDefaultValue();
} else {
...
}
} catch(\Exception $e) {
...
}
// Call function
return call_user_func_array(array($Class, "search"), $parameters);
Run Code Online (Sandbox Code Playgroud)
我$this->params有这样的内容:
array
'paginationPage' => int 2
'id' => int 30
'searchKey' => string 'test' (length=4)
Run Code Online (Sandbox Code Playgroud)
因为$ summary,$ title和$ authors不存在,所以它们将获得默认值null.为参数分配空值时,将跳过它,这将导致$ parameters数组看起来像这样:
array
'searchKey' => string 'test' (length=4)
'paginationPage' => int 2
Run Code Online (Sandbox Code Playgroud)
这导致方法调用如下:
public function search('test', 2, null, null, 0) {
...
}
Run Code Online (Sandbox Code Playgroud)
虽然它应该是:
public function search('test', null, null, null, 2) {
...
}
Run Code Online (Sandbox Code Playgroud)
希望你看到问题.如何确保将这些空值也放入我的$parameters数组中.无法添加无效值,因为它是用户输入,因此基本上可以是所有内容.
编辑
在上面的示例中,该方法search是硬编码的.但其中一个简单的事情是,search它实际上是一个变量,因为它search可以是任何东西.这意味着我不知道方法的参数是什么,我不能在foreach循环之前预先定义它们.预定义参数的解决方案实际上正是此代码应该做的事情.
如何$parameters在进入foreach循环之前进行预初始化:
$parameters = array(
$searchKey => null,
$summary => null,
$title => null,
$authors => null,
$paginationPage => 0
);
Run Code Online (Sandbox Code Playgroud)
哦天哪...这只是一个简单的错字:
...
} elseif($Parameter->isDefaultValueAvailable()) {
$paramaters[$Parameter->name] = $Parameter->getDefaultValue();
} else {
...
Run Code Online (Sandbox Code Playgroud)
我真丢脸!
| 归档时间: |
|
| 查看次数: |
13189 次 |
| 最近记录: |