Класс доступа PHP в другом классе

Таким образом, у меня есть два класса как это:

class foo {
    /* code here */
}
$foo = new foo();
class bar {
    global $foo;
    public function bar () {
        echo $foo->something();
    }
}

Я хочу получить доступ к методам нечто во всей панели методов, не объявляя это в каждом методе в панели, как это:

class bar {
    public function bar () {
        global $foo;
        echo $foo->something();
    }
    public function barMethod () {
        global $foo;
        echo $foo->somethingElse();
    }
    /* etc */
}

Я не хочу расширять его, также. Я пытался использовать ключевое слово var, но это, казалось, не работало. Что я делаю для доступа к другому классу "нечто" во всех методах панели?

7
задан Waleed Khan 19 May 2010 в 02:02
поделиться

3 ответа

Вы тоже можете сделать это:

class bar {
    private $foo = null;

    function __construct($foo_instance) {
      $this->foo = $foo_instance;
    }

    public function bar () {
        echo $this->foo->something();
    }
    public function barMethod () {
        echo $this->foo->somethingElse();
    }
    /* etc, etc. */
}

Позже вы можете сделать:

$foo = new foo();
$bar = new bar($foo);
8
ответ дан 6 December 2019 в 14:01
поделиться

Сделать его членом бара. Старайтесь никогда не использовать глобальные переменные.

class bar {
    private $foo;

    public function __construct($foo) { $this->foo = $foo; }

    public function barMethod() {
        echo $this->foo->something();
    }
}
4
ответ дан 6 December 2019 в 14:01
поделиться

Краткий ответ: нет, нет возможности реализовать то, что вы хотите.

Еще один короткий ответ: вы «неправильно» работаете с классами. После того, как вы выбрали объектно-ориентированную парадигму - забудьте о ключевом слове global.

Правильный способ сделать то, что вы хотите, - создать экземпляр foo как член bar и использовать его методы. Это называется делегированием .

2
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: