Ben bir işlevi varsa:
function this($a){
return $a;
}
Ben işlevini yeniden tanımlamak istiyorsa, onu yeniden kadar basit olurdu?
function this($a, $b){ //New this function
return $a * $b;
}
Hayır, bu bir hata atar:
Fatal error: Cannot redeclare foo()
Runkit runkit_function_rename() and runkit_function_redefine() a> da dahil olmak üzere, seçenekler sunar.
Bir Java anlamda aşırı yükleme demek, o cevap hayır, bu mümkün değil mi.
Alıntı PHP manual on functions:
PHP işlevi desteklemediği gibi, ne de önceden ilan işlevleri tanımsız ya da yeniden tanımlamak mümkündür.
Sen runkit uzantısı ama üretim senaryolarında runkit kullanımını kullanabilirsiniz genellikle şüpheli uygulama olarak kabul edilir. Eğer zamanında algoritmaları alışverişi yapmak istiyorsanız, Strategy pattern veya Anonymous functions yerine bakabilirsiniz.
Yeniden tanımlamak tarafından Varolan userland fonksiyonu, Refactor, yerine eklemek veya yeniden demek durumunda, o zaman evet: o gösterdiğin kadar basittir. Sadece işlevine ek kod eklemek, ama geriye doğru uyumluluk için varsayılan ayarlarsanız emin olun.
Başka bir seçenek kullanmak olacaktır http://antecedent.github.io/patchwork
Patchwork mümkün gevşek saf PHP işlevselliği
runkit_function_redefinekopyalayan, zamanında kullanıcı tanımlı işlevleri ve yöntemleri yeniden tanımlamak için yapan bir PHP kütüphanesi, diğer şeyler arasında, değiştirmek sağlayan, 5.3 kodu, statik ve özel deney çiftler ile yöntemleri.
Sen (üçüncü parti modüller başvurmadan) PHP bir işlevi yeniden tanımlamak ya da 'tanımsız' olamaz. Ancak, koşullu bir fonksiyon tanımlayabilirsiniz.
Işlevini biliyorum Yani, A başka yerde tanımlanabilir, ama her zaman değil, bu gibi sarın:
if (!function_exists('A')) {
function A() {
// default A implementation
}
}
Sonra tek emin istediğiniz uygulama ilk karşılaştı yapmak gerekir:
function A() {
// another A implementation
}
Ekleyeceğiniz yeni argümanları uygun bir varsayılan olarak ayarlanması, geriye dönük uyumluluk, yani için yardımcı olabilir:
function this($a, $b=1){ //New this function with a sane default.
return $a * $b;
}
Ben de genellikle fonksiyon / değişken isimleri için this kullanarak kaçınarak, açıklık için, tavsiye ederim.
I've got a library of functions that sometimes I just don't want invoked while I'm testing (typically database updates). If I have, for example, a few different db update functions that are all over the code. instead of commenting out the code, I just create a special class (e.g. class foo {}). Define a global variable (e.g., $DEBUG) and a dummy function (e.g., function dummy {}). Inside foo define all the (public static) functions you need to mimic as
$fn = isset($DEBUG) ? 'dummy' : 'real function'; return call_user_func_array($fn,func_get_args());
Artı aramaları ve parametreleri günlüğü gibi, artık başka şeyler yapmanın avantajları var.
Sonra sadece foo :: real_function (...) ile tüm aramaları real_function için (...) değiştirin. Genellikle sadece basit bir arama / değiştirme (ya da orada bırakmak, işlevi oluyor ve ne sıklıkta havai alakasız olabilir denir vurmayacak ne bağlı olarak).