有人可以解释 call_user_func_array(array(arg1, arg2), []) 是如何工作的吗?

Can someone explain how call_user_func_array(array(arg1, arg2), []) works?

我知道这是一个非常模糊的问题,但我只是直觉上不明白。我主要是一个 javascript/java 的人,所以你必须原谅我。

当执行如下操作时,第一个数组调用内部会发生什么:

call_user_func_array(array($this, $this->statementType), array($args))

将其转换为 $this 对象成员的回调函数?我知道它有效,我只是不完全明白为什么,这让我很烦。

在 PHP 中,您可以将 callable 定义为 array,它是调用上下文和函数名称的组合。

如果您使用 [$this, $string],它将调用 $this 实例上存储在 $string 中的函数名称。 ([$this, 'functionName'] 也可以,它不需要是一个变量)

如果您使用[$className, $string],它将导致静态调用。 这里的示例可以是 ['\Namespace\MyClass', 'functionName'][\NameSpace\MyClass::class, 'functionName'] 或带有变量。 ::class 语法有很多优点,正如 here 已经回答的那样。静态调用也可以通过单个字符串完成(例如"\Namespace\MyClass::functionName"

第二个数组,正如函数记录的那样,是调用函数时传递给函数的参数列表,但我认为这部分已经很清楚了。