В документации по PHP говорится о __call()
:
__call () запускается при вызове недоступных методов в контексте объекта.
Есть ли способ, которым я могу вызвать __call()
даже когда метод существует, до __call()
фактического метода? Или, есть ли какой-нибудь другой крюк, который я могу реализовать, или другой способ, который обеспечил бы эту функциональность?
Если это имеет значение, это для static function
(и я бы предпочел использовать __callStatic
).
Как насчет того, чтобы защитить все ваши другие методы и проксировать их через __callStatic?
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();
Почему бы просто не защитить все ваши методы и назвать их с помощью __call ():
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'