【问题标题】:Can someone explain how call_user_func_array(array(arg1, arg2), []) works?有人可以解释 call_user_func_array(array(arg1, arg2), []) 是如何工作的吗?
【发布时间】:2018-06-27 19:52:00
【问题描述】:

我知道这是一个非常模糊的问题,但我只是不直观地理解它。我主要是一个 javascript/java 人,所以你不得不原谅我。

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

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

把它变成一个回调函数,它是 $this 对象的成员?我知道它有效,但我只是不完全明白为什么,这让我很烦。

【问题讨论】:

  • $this->statementType 应该是存在于$this 对象中的方法名称。

标签: php call-user-func-array


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!我可能可以在某个地方的文档中找到它,但我大约每两个月编写一次 PHP。我可以假设您只能将两个成员添加到这种可调用数组中吗?虽然我听说静态变量中的 $className 只是另一个字符串?
  • 如果您想要获取大量信息,可以点击进入可调用手册页,但是是的,它始终是上下文和方法。至于静态调用,我加了几个例子。
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 2021-05-11
  • 2019-06-25
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多