Вызов функции класса журнала переполнения стека

Я работаю над функцией-оберткой вокруг существующего класса.

<?php
class wrapper extends client {
public function __call($name,$args) {
var_dump($name);
var_dump($args);
}
}

$client = new wrapper();
$client->users()->foobar();
?>

И мне ответ таков:

    string(5) "users"array(0) {
}

Моя цель — записать, какая функция вызывается и с параметрами.

Как я могу видеть, что функция foobar () в классе пользователей была вызвана. А не только «пользователи»? Есть ли правильный способ сделать это правильно?

1

Решение

То, что вы пытаетесь сделать, это реализовать декоратор Шаблон, а не просто расширить класс. Это очень легко, так как у нас есть те магические методы, которые вы уже использовали. Но вы пропустили две важные части в своем классе оболочки:

  • Создать экземпляр дочернего класса
  • передать вызов функции в дочерний класс

Ваше расширение не будет работать как волшебство __вызов Метод вызывается только в том случае, если у класса нет метода с указанным именем. Так что вам нужен класс Wrapper Decorator, который не имеет этих методов.

Образец:

class BetterWrapper {
protected $child;

public function __construct(){
$this->child = new Client();
}

public function __call($name,$args) {
var_dump($name);
var_dump($args);

return call_user_func_array(array($this->child, $name), $args);
}
}

Попробуйте это вместо этого.

Смотрите этот документ для механики метода __call: http://php.net/manual/en/language.oop5.overloading.php#object.call

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]