gpt4 book ai didi

php - 将 call_user_func() 与对象一起使用

转载 作者:行者123 更新时间:2023-12-02 09:41:12 25 4
gpt4 key购买 nike

下面的两条语句应该是相同的,但是注释掉的语句不起作用。谁能解释一下吗?

$peer = GeneralToolkit::getPeerModel($model);
//return call_user_func(get_class($peer).'::retrieveByPK',array($comment->getItemId()));
return $peer->retrieveByPK($comment->getItemId());

PS:我使用的是 PHP 5.2.11

最佳答案

这两个调用不一样。您正在调用:

return GeneralToolkit::retrieveByPK(array($comment->getItemId());

所以你当然会得到不同的答案。这是正确的代码:

return call_user_func(array($peer, 'retrieveByPK'), $comment->getItemId());

除非“retrieveByPK”是静态的,但在这种情况下,您应该使用以下调用之一(这些调用都执行相同的操作):

return call_user_func(
get_class($peer) . '::retrieveByPK',
$comment->getItemId());

return call_user_func(
array(get_class($peer), 'retrieveByPK'),
$comment->getItemId());

return call_user_func_array(
get_class($peer) . '::retrieveByPK',
array($comment->getItemId()));

return call_user_func_array(
array(get_class($peer), 'retrieveByPK'),
array($comment->getItemId()));

因此,在这种情况下,您的错误在于使用 array()调用call_user_func()时而不是call_user_func_array() .

说明:

类有两种主要类型的函数:静态函数和非静态函数。在普通代码中,使用 ClassName::functionName() 调用静态函数。对于非静态函数,您首先需要使用 $objectInstance = new ClassName() 创建一个对象,然后使用 $objectInstance->functionName() 调用该函数.

使用回调时,您还可以区分静态函数和非静态函数。静态函数存储为字符串 "ClassName::functionName"或包含两个字符串 array("ClassName", "FunctionName") 的数组.

非静态函数的回调始终是一个数组,其中包含要调用的对象和字符串形式的函数名称:array($objectInstance, "functionName) .

请参阅PHP Callback documentation了解更多详情。

关于php - 将 call_user_func() 与对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979179/

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