Iki çağrıları aynı değildir. Sen diyorsun:
return GeneralToolkit::retrieveByPK(array($comment->getItemId());
Yani tabii ki farklı bir cevap olsun. Bu doğru kod:
return call_user_func(array($peer, 'retrieveByPK'), $comment->getItemId());
'RetrieveByPK' statik olmadıkça, ancak bu durumda bu aramalardan birini kullanmalıdır (bunların hepsi aynı şeyi yapar):
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()));
Yani bu durumda hata call_user_func()
yerine arama sırasında array()
kullanılarak oldu call_user_func_array()
.
Explanation:
Statik ve statik olmayan: Sınıflar işlevleri iki ana türü vardır. Normal kodu, statik işlevleri ClassName::functionName()
kullanılarak çağrılır. Statik olmayan fonksiyonlar için $objectInstance = new ClassName()
, sonra da $objectInstance->functionName()
kullanarak işlevini çağırmak kullanarak bir nesne oluşturmak için ilk gerekir.
Geri çağrıları kullanarak zaman da statik ve statik olmayan fonksiyonlar arasında bir ayrım yapmak. Statik işlevleri bir dize "ClassName::functionName"
veya iki dizeleri array("ClassName", "FunctionName")
içeren bir dizi ya olarak depolanır.
Bir statik olmayan fonksiyonu üzerine bir geri her zaman bir dize olarak çağırmak için nesne ve fonksiyon adını içeren bir dizidir: array($objectInstance, "functionName)
.
PHP Callback documentation daha fazla bilgi için bkz.