gpt4 book ai didi

php - 动态调用类方法参数

转载 作者:可可西里 更新时间:2023-11-01 13:13:35 35 4
gpt4 key购买 nike

我正在做一些需要能够将参数的索引数组传递给方法的事情,就像 call_user_func_array 的工作方式一样。我会使用 call_user_func_array 但它不是 OOP 方法,这是不受欢迎的,并且它要求方法是静态的,这会破坏目标类的 OO。

我曾尝试使用 ReflectionClass 但无济于事。您不能调用类方法的参数,只能调用构造函数。不幸的是,这是不可取的。

所以我查看了手册页并查看了 ReflectionFunction,但是没有办法实例化该类,将其指向一个方法,然后使用它来 invokeArgs

使用 ReflectionFunction 的示例(请记住,这个问题被标记为 PHP 5.4,因此是语法):

$call = new \ReflectionFunction( "(ExampleClass())->exampleMethod" );
$call->invokeArgs( ["argument1", "argument2"] );

这失败了:

Function (Index())->Index() does not exist

使用 ReflectionMethod 的例子

$call = new \ReflectionMethod( "ExampleClass", "exampleMethod" );
$call->invokeArgs( new ExampleClass(), ["argument1", "argument2"] );
print_r( $call );

这失败了:

ReflectionMethod Object
(
[name] => Index
[class] => Index
)

参数永远不会传递给方法。

期望的结果是:

class ExampleClass() {
public function exampleMethod( $exampleArg1, $exampleArg2 ){
// do something here
echo "Argument 1: {$exampleArg1}\n";
echo "Argument 2: {$exampleArg2}\n";
}
}

$array = [ 'exampleArg1Value', 'exampleArg2Value' ];

如果我将 $array 传递给 ExampleClass->exampleMethod() 的一个实例,我将只有一个参数,即一个数组。相反,我需要能够提出各个论点。

我在想,如果有一种方法可以在 ReflectorClass 上调用 ReflectorFunction,我会按原样进行,但它看起来并不像这样是可能的。

有没有人有他们以前用过的东西来完成这个?

最佳答案

AFAIK,以下应该有效:

$call = new \ReflectionMethod( "ExampleClass", "exampleMethod" );
$call->invokeArgs( new ExampleClass(), ["argument1", "argument2"] );
print_r( $call );

PHP 的次要版本是什么?你在 5.4.7 上吗?

关于php - 动态调用类方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12629112/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com