PHP - otomatik olarak başka bir önce bir tane diyorsun?

4 Cevap php

PHP, sınıf yöntemi otomatik olarak geçerli bir önce diğer bazı belirtilen yöntemini çağırmak yapmak için herhangi bir yolu var mı? (Ben temelde Ruby on dan before_filter simüle etmek için arıyorum.

Örneğin, doğrudan fonksiyon b çağırarak ama çıktı 'merhaba' oluyor.

function a() 
{
echo 'hello';
}

function b() 
{
echo 'you';
}

Herhangi bir tavsiye takdir.

Teşekkürler.

4 Cevap

Bu kontrol edin:

class Dispatcher {
    /*
     * somewhere in your framework you will determine the controller/action from path, right?
    */
    protected function getControllerAndActionFromPath($path) {
        /*
         * path parsing logic ...
        */
        if (class_exists($controllerClass)) {
            $controller = new $controllerClass(/*...*/);
            if (is_callable(array($controller, $actionMethod))) {
                $this->beforeFilter($controller);
                call_user_func(array($controller, $actionMethod));
                /*..
                 * $this->afterFilter($controller);
                 * ...*/
            }
        }
    }

    protected function beforeFilter($controller) {
        foreach ($controller->beforeFilter as $filter) {
            if (is_callable(array($controller, $filter))) {
                call_user_func(array($controller, $filter));
            }
        }
    }

    /*...*/
}

class FilterTestController extends Controller {
    protected $beforeFilter = array('a');

    function a() {
        echo 'hello';
    }

    function b() {
        echo 'you';
    }
}

PHP filters.However desteklemiyor, sadece) a () her zaman (b önce çalıştırmak emin olmak için kendi fonksiyonunu modefy olabilir.

function a() 
{ 
echo 'hello';
}

function b() 
{
a();
echo 'you';
}

Eğer ab geçersiz kılmak için istekli değilseniz () hem de aramak için değil.

Gerçi PHP için AOP ilginizi çekebilir.

Buna ne dersiniz:

function a() 
{
  echo 'hello';
}

function b() 
{
  a();
  echo 'you';
}

Eğer bir sınıf altında ve hem de işlevleri bu sınıfta iseniz:

function a() 
{
  echo 'hello';
}

function b() 
{
  $this->a();
  echo 'you';
}

Emin değilim ama muhtemelen bu sizin için ne arıyorsanız. teşekkürler