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.