PHP call_user_func vs sadece arama fonksiyonu

5 Cevap php

Bunun için çok kolay bir açıklaması vardır eminim. Bu arasındaki fark nedir:

function barber($type){
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");

... Ve bu (ve faydaları nelerdir?):

function barber($type){
    echo "You wanted a $type haircut, no problem\n";
}
barber('mushroom');
barber('shave');

Şimdiden teşekkürler.

5 Cevap

Bunu biliyorsun her zaman gerçek işlev adını kullanın.

call_user_func Adını vaktinden bilmiyorum ama programın zamanında işlevi arama için vardır çünkü çok daha az verimli işlevleri çağıran içindir.

Değişken fonksiyon adları bu şekilde çağırabilirsiniz rağmen:

function printIt($str) { print($str); }

$funcname = 'printIt';
$funcname('Hello world!');

Eğer geçen konum kaç argüman bilmiyorum durumlar vardır. Aşağıdaki düşünün:

function someFunc() {
  $args = func_get_args();
  // do something
}

call_user_func_array('someFunc',array('one','two','three'));

Bu sırasıyla, statik ve nesne yöntemleri çağırmak için de kullanışlı:

call_user_func(array('someClass','someFunc'),$arg);
call_user_func(array($myObj,'someFunc'),$arg);

gibi şeyler yapabilirsiniz böylece call_user_func seçeneği vardır:

$dynamicFunctionName = "barber";

call_user_func($dynamicFunctionName, 'mushroom');

dynamicFunctionName dize daha heyecanlı ve çalışma zamanında oluşturulmuş olabilir nerede. Mecbur olmadıkça yavaş olduğundan, call_user_func kullanmamalısınız.

İlk örnekte, bir dize hangi fonksiyonun adını kullanarak ediyoruz. dışarıdan gelebilir ya da anında tespit edilecek. yani, kod yaratma anda çalıştırmak gerekir hangi işlevi bilmiyorum.

Ad kullanırken, call_user_func () Örneğin, önceden ismini bilmiyorum bir işlevi çalıştırmak için tek yoldur:

$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');

Tüm fonksiyonlar aynı ad olsaydı böyle bir şey kullanabilirsiniz gibi, o zaman, böyle bir sorun olmaz:

$function = 'getCurrency';
$function('USA');