Yöntemi varsa bile PHP __ çağrısı () Tetikleme

2 Cevap php

PHP belgelerine __ çağrısı () sihirli yöntem hakkında şunları söylüyor:

__call() is triggered when invoking inaccessible methods in an object context.

I () fiili yöntemi çağrılmadan önce, bir yöntem varsa bile denir __ çağrı olabilir bir yolu var mı? Yoksa, ben uygulamaya bazı başka kanca veya bu işlevselliği sağlayacak başka bir yol var mı?

Bu konularda, bu statik işlev için (ve aslında __ callStatic kullanmak isterim).

2 Cevap

Nasıl sadece tüm diğer yöntemler korumalı yapmak ve __ callStatic aracılığıyla vekaleten onlar hakkında?

namespace test\foo;

class A
{
    public static function __callStatic($method, $args)
    {
        echo __METHOD__ . "\n";

        return call_user_func_array(__CLASS__ . '::' . $method, $args);
    }

    protected static function foo()
    {
        echo __METHOD__ . "\n";
    }
}

A::foo();

Neden sadece tüm yöntemleri korumalı yapmak ve __ çağrısı kullanarak onları aramak değil ():

 class bar{
    public function __call($method, $args){
        echo "calling $method";
        //do other stuff
        //possibly do method_exists check
        return call_user_func_array(array($this, $method), $args);
    }
    protected function foo($arg){
       return $arg;
    }
 }

$bar = new bar;
$bar->foo("baz"); //echo's 'calling foo' and returns 'baz'