Python dekoratör için PHP eşdeğer?

3 Cevap php

Ben başka bir işlev tarafından bir PHP işlevini sarmak için mümkün olmak istiyorum, ama bozulmadan orijinal adı / parametre listesi bırakarak.

Örneğin:

function A() {
    print "inside A()\n";
}

function Wrap_A() {
    print "Calling A()\n";
    A();
    print "Finished calling A()\n";
}

// <--- Do some magic here (effectively "A = Wrap_A")

A();

Çıktı:

Calling A()
inside A()
Finished calling A()

3 Cevap

Görünüşe göre runkit olabilir help you.

Ayrıca, her zaman bu OO şekilde yapabilirsiniz. Uzun bir sınıfa bir sınıf orijinal eğlenceli ve dekoratör koyun. Instantiate ve gidin.

PHP fonksiyonları ile bunu yapamazsınız. Perl ve Ruby gibi diğer dinamik dillere,, önceden tanımlanmış fonksiyonlarını yeniden tanımlamak, ancak bunu yapmak için çalıştığınızda PHP ölümcül bir hata atar.

5.3 olarak, bir anonymous function oluşturabilir ve bir değişkende saklamak:

<?php
    $my_function = function($args, ...) { ... };
    $copy_of_my_function = $my_function;
    $my_function = function($arg, ...) { /* Do something with the copy */ };
?>

Alternatif olarak, geleneksel dekoratör desen ve / veya bir fabrika kullanmak ve yerine sınıflar ile çalışmak.