Таким образом, у меня есть два класса как это:
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, но это, казалось, не работало. Что я делаю для доступа к другому классу "нечто" во всех методах панели?
Вы тоже можете сделать это:
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);
Сделать его членом бара. Старайтесь никогда не использовать глобальные переменные.
class bar {
private $foo;
public function __construct($foo) { $this->foo = $foo; }
public function barMethod() {
echo $this->foo->something();
}
}
Краткий ответ: нет, нет возможности реализовать то, что вы хотите.
Еще один короткий ответ: вы «неправильно» работаете с классами. После того, как вы выбрали объектно-ориентированную парадигму - забудьте о ключевом слове global.
Правильный способ сделать то, что вы хотите, - создать экземпляр foo
как член bar
и использовать его методы. Это называется делегированием
.