The following two statements should be identical, yet the commented out statement does not work. Can anyone explain ?
$peer = GeneralToolkit::getPeerModel($model);
//return call_user_func(get_class($peer).'::retrieveByPK',array($comment->getItemId()));
return $peer->retrieveByPK($comment->getItemId());
PS: I am using PHP 5.2.11
The two calls are not the same. You are calling:
So of course you get a different answer. This is the correct code:
Unless ‘retrieveByPK’ is static, but in that case you should use one of these calls (these all do the same thing):
So in that case your error was in using
array()while callingcall_user_func()instead ofcall_user_func_array().Explanation:
Classes have two main types of functions: static and non-static. In normal code, 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 stringsarray("ClassName", "FunctionName").A callback on a non-static function is always 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.