O (posta gibi) php bir işlevi değiştirmek ve başka bir şey yapmak mümkün mü?

4 Cevap php

PHP bir işlev (en posta () işlevini diyelim) yeniden yazmak istiyorum, ve ben artık mail () çağırdığınızda bu yüzden, benim posta sürümü () değil, varsayılan php sürümü yüklemek olacaktır bunu yapmak istiyorum. Bu php mümkün mü?

Ben mail () arayın ve ben hepsini yeniden yazmak istemiyorum kod satırları binlerce çünkü ben bunu yapmak istiyorum nedenidir.

Eğer böyle bir şey yaptığınızda da ileride, bilgisayar programlama, ne denir?

Teşekkürler

4 Cevap

Bu işlevleri geçersiz kılmak için izin veren bir uzantısı vardır. Bu hata ayıklama için kullanılacak anlamına geliyordu, ama ben sizin ihtiyaçlarınız için kullanabilirsiniz tahmin edilmektedir. Bir göz atın:

http://www.php.net/manual/en/function.override-function.php

If you wish to call the original function within your version, make sure you read this comment: http://no.php.net/manual/en/function.override-function.php#50821

Ne söz ediyorsun, genellikle denir method overloading.

Genellikle PHP tarafından desteklenen olmasa da, aslında may be able to redefine dahili fonksiyonları (yanı sıra kullanıcı işlevleri) kullanılarak runkit_function_remove() or runkit_function_redefine() . Of course to use that, you'll need to have pretty much full control over the PHP installation - since it's not bundled with PHP you'll need to install the runkit extension.

Yine, in a normal situation internal functions yanı sıra kullanıcı fonksiyonları cannot be redefined PHP (veya aşırı). Bu durum, bir kullanıcının fonksiyonu olan bir iç fonksiyonlarını sarma yararını göstermektedir.

Bu fonksiyon aşırı yükleme denir ve diğer yanıtlar özetlenen uzantılarını kullanarak native PHP ama mümkün mümkün değil mi. PHP belgelerine bu hiç mümkün değildir iddia: yanlış source ki.

Sen dosyaları işlev adını değiştirmek için İfadelerinin kullanabilirsiniz. Ne app kullanmak size kalmış, ama ben ovely-pahalı Powergrep (tekrar ihtiyacınız olmadığı sürece) tavsiye ederim.

değiştirmek

   (\s+)mail([\s(]+)

karşı

   $1new_function_name$2

ve

   ^mail([\s(]+)

karşı

   new_function_name$1

Sorry for my regexp-fu, I don't know how karşı search for either spaces OR begining of line in one expression.