Call_user_func Kullanma () nesneler ile

2 Cevap php

Aşağıdaki iki tablo aynı olmalıdır, henüz dışarı yorumladı deyimi çalışmıyor. Herkes açıklayabilir misiniz?

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

PS: Ben PHP 5.2.11 kullanıyorum

2 Cevap

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.

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

eşdeğerdir

return $peer->retrieveByPK($comment->getItemId());

İlk bağımsız değişken bir nesne başvurusu ve bir işlev adını verir. İkinci argüman denir ediliyor işleve geçirilen argümanlar verir.

:: sözdizimi statik yöntemleri ve class özelliklerini başvurmak için kullanılır. Hangi olmayan statik yöntemleri ve özellikleri başvurma farklıdır.