The two calls are not the same. You are calling:
return GeneralToolkit::retrieveByPK(array($comment->getItemId());
So of course you get a different answer. This is the correct code:
return call_user_func(array($peer, 'retrieveByPK'), $comment->getItemId());
Unless 'retrieveByPK' is static but then you should use one of these calls (that all do the same thing):
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()));
So in that case your error was in using array()
while calling call_user_func()
instead of call_user_func_array()
.
Explanation added
Classes have two main types of functions static and non-static. In normal code non static functions are called using ClassName::functionName()
. For non-static functions you need first to create an object using $objectInstance = new ClassName()
, then call the function using $objectInstance->functionName()
.
When using callbacks you also make a distinction between static and non-static functions. Static functions are stored as either a string "ClassName::functionName"
or an array containing two strings array("ClassName", "FunctionName")
.
A callback on a non static functions always is an array containing the object to call and the function name as a string: array($objectInstance, "functionName)
.
See the PHP Callback documentation for more details.