Вызов метода второго класса через свойство первого класса

Рейтинг: -1Ответов: 2Опубликовано: 28.03.2015

Привет!)

Условие:

в классе_1 есть такая строчка: $this->module = $_GET['module'];

В последствии необходимо вызвать метод класса_2. Обычный вызов происходит вот так: $this->класс_2->метод();

Задача:

чтобы вызываемый "метод()" равнялся $this->module.

Проблема:

нельзя произвести вызов таким образом $this->класс_2->$this->module()

Пояснение:

Я прекрасно понимаю и осознаю, почему нельзя сделать $this->класс_2->$this->module(). Задаю вопрос здесь, скорее, чтобы убедится, что решения, кроме как создания обычной переменной и дублирования туда $_GET['module'] или вызова напрямую с $_GET['module'], нет. То есть или вот так:

$module = $_GET['module'];
$this->класс_2->$module();

или вот так:

$this->класс_2->$_GET['module']();

Все ли правильно и верно?

Спасибо! =)

Ответы

▲ 3Принят

Для вызова произвольной функции/метода нужна функция call_user_func() или call_user_func_array().

call_user_func(array($this->clazz2Instance, $this->module));

Есть еще call_user_func(), но она вряд ли понадобится.

▲ 3

Получить методы можно от наследуемого класса, то есть

class Foo {
    public function foo() {
        return true;
    }
}

class Bar extends Foo {
    public function bar() {
        parent::foo();
    }
}

Либо явно создав объект.

Документация