我知道这是一个非常模糊的问题,但我只是不直观地理解它。我主要是一个 javascript/java 人,所以你不得不原谅我。
执行以下操作时,第一个数组调用内部会发生什么:
call_user_func_array(array($this, $this->statementType), array($args))
把它变成一个回调函数,它是 $this 对象的成员?我知道它有效,我只是不完全明白为什么而且它让我烦恼。
我知道这是一个非常模糊的问题,但我只是不直观地理解它。我主要是一个 javascript/java 人,所以你不得不原谅我。
执行以下操作时,第一个数组调用内部会发生什么:
call_user_func_array(array($this, $this->statementType), array($args))
把它变成一个回调函数,它是 $this 对象的成员?我知道它有效,我只是不完全明白为什么而且它让我烦恼。
在 PHP 中,您可以将 a 定义callable
为array
调用上下文和函数名的组合。
如果您使用[$this, $string]
它将调用名称存储在实例中的$string
函数$this
。([$this, 'functionName']
也可以,它不需要是一个变量)
如果使用[$className, $string]
它将导致静态调用。这里的例子可以是['\Namespace\MyClass', 'functionName']
or[\NameSpace\MyClass::class, 'functionName']
或 with 变量。::class
语法有许多优点,正如这里已经回答的那样。静态调用也可以通过单个字符串来完成("\Namespace\MyClass::functionName"
例如)
第二个数组,正如函数所记录的那样,是调用函数时要传递给函数的参数列表,但我认为这部分已经很清楚了。