有人可以解释 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"
)
第二个数组,正如函数记录的那样,是调用函数时传递给函数的参数列表,但我认为这部分已经很清楚了。
我知道这是一个非常模糊的问题,但我只是直觉上不明白。我主要是一个 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"
)
第二个数组,正如函数记录的那样,是调用函数时传递给函数的参数列表,但我认为这部分已经很清楚了。