Eğer adını yinelenen olmadan bir PHP fonksiyonu özyinelemeli yapabilir miyim?

4 Cevap php

Her zaman bir örneği class $this ve statik bir metod self vb kullanabilirsiniz kullanabilirsiniz zaman bir özyinelemeli fonksiyon, kendisini isim gerekiyor bana dinlenmişti oluyor

(Sadece bakım kısmak için) yeniden adlandırma olmadan bir özyinelemeli işlevi bunu benzer bir yolu var mı?

Açıkçası ben call_user_func veya __FUNCTION__ sabit kullanabilirsiniz ama daha az çirkin bir şey tercih ediyorum.

4 Cevap

Sen yararlanabilirler variable functions and declare a variable with the function name at the beginning of you function (or wherever). No need for call_user_func:

function test($i) {
   $__name = __FUNCTION__;
   if($i > 5) {
       echo $i. "\n";
       $__name($i-1);
   }
}

Don't forget that using the real function name is probably more readable for other people :)
(at least provide a comment why you do this)


Update:
As @Alix mentions in his comment, it might be useful to declare $__name as static. This way, the value is not assigned over and over again to the variable.

Bu çirkin neden bilmiyorum:

return call_user_func_array(__FUNCTION__, func_get_args());

Karşı:

return call_user_func_array('someFunction', func_get_args());

Size (sizin işlevleri argümanlar [yeri / farklı bir sayı] varsa) bakım kısmak arıyorsanız eğer hala call_user_func_array() kullanmak gerekir.

Bunun dışında I don't see another way. Bunu yapmak için de a static method cannot reference itself using self:: , only to its class. You would also need to use the magic __METHOD__ sabiti.

Statik bir yöntem içinde bu yapmak isteyen o sizin için:

forward_static_call(array('self', __METHOD__), $arg1, $arg2, $etc);

Yöntemi değiştirildi ise, bu şekilde de içindeki tüm yineleme çağrıları değiştirme hakkında endişelenmenize gerek yok.

function anyfunc() {
    __FUNCTION__();
}

sınıfta kullanıldığı takdirde:

protected function anymethod() {
    $this->{__FUNCTION__}();
}