Siz Python yapabilirsiniz, ancak PHP mümkün mü?
>>> def a(): print 1
...
>>> def a(): print 2
...
>>> a()
2
örneğin:
<? function var_dump() {} ?>
Fatal error: Cannot redeclare var_dump() in /tmp/- on line 1
Hayır, tahmin edebileceğiniz gibi bunu yapmak mümkün değildir.
Kimden manual
a>:
PHP işlevi desteklemediği gibi, ne de önceden ilan işlevleri tanımsız ya da yeniden tanımlamak mümkündür.
ANCAK, Sen runkit_function_redefine
a> ve kuzenleri kullanabilirsiniz, ama kesinlikle çok şık değil ...
Ayrıca kullanmak create_function
a> böyle bir şey yapabilirsiniz:
<?php
$func = create_function('$a,$b','return $a + $b;');
echo $func(3,5); // 8
$func = create_function('$a,$b','return $a * $b;');
echo $func(3,5); // 15
?>
Runkit gibi, çok zarif değil, ama aradığınız davranışını verir.
Bu soru biraz eski olduğunu biliyoruz, ama Patchwork kullanıcı tanımlı işlevler yeniden tanımlanmasını destekleyen bir süre önce yayımlanan PHP 5.3 projesidir. Rağmen, yazar bahseder gibi, maymun-yama çekirdek / kütüphane işlevleri için runkit veya php-test-helpers başvurmak gerekir.
Jmikola belirtildiği gibi bir işlev kodu eklemek istiyorsanız, Patchwork iyi bir çözümdür.
Here's an article about how it works: http://phpmyweb.net/2012/04/26/write-an-awesome-plugin-system-in-php/
Bazı örnek kodu ile gelir. O eval () 'd code, aksine patchwork kullanmak değil çünkü ben, phpmyweb sürümü biraz daha iyi bir kod kullanır düşünüyorum. Eval () kullanırken opcodes önbelleğe alabilir.
Bu bit Geç met, ben sadece PHP 5.3 yana, bir PHP uzantısı kullanmadan içten işlevleri geçersiz aslında mümkün olduğunu işaret etmek istiyorum.
Hüner bir isim alanı içinde dahili bir PHP işlevini yeniden tanımlamak olabilir. PHP fonksiyonları için ad çözümlemesi yapar yolda dayanıyor:
İsim alanı içindeki (A \ B diyelim), niteliksiz fonksiyonları çalışma anında çözümlenir çağırır. İşte foo işlev çağrısı () çözümlenir: