Учитывая следующее PHP:Ссылка на метод контейнерного объекта в PHP?
<?php
class foo {
public $bar;
function __construct() {
"Foo Exists!";
}
function magic_bullet($id) {
switch($id) {
case 1:
echo "There is no spoon! ";
case 2:
echo "Or is there... ";
break;
}
}
}
class bar {
function __construct() {
echo "Bar exists";
}
function target($id) {
echo "I want a magic bullet for this ID!";
}
}
$test = new foo();
$test->bar = new bar();
$test->bar->target(42);
Я интересно, если это возможно для класса «бар», чтобы вызвать метод «волшебной пули» класса «Foo». Экземпляр «bar» содержится в экземпляре «foo», но не связан с ним родительским/дочерним. На самом деле у меня есть много различных классов «бар», которые «foo» имеет в массиве, каждый из которых делает что-то отличное от $ id, прежде чем хочет передать его функции «magic_bullet» для конечного результата, поэтому запрет структуры изменение отношений класса, можно ли получить доступ к методу экземпляра «контейнер»?
Блестящий! Это работает для моей настройки, помимо других предложений по добавлению указателя на экземпляр foo для экземпляра бара, потому что, предполагая множество экземпляров «bar», я не хочу, чтобы COPIES экземпляра foo внутри экземпляра бара (дополнительное использование памяти, плюс если исходный экземпляр $ test изменит что-то, что изменило поведение 'magic_bullet', все копии будут устаревшими), я хочу СПРАВОЧНИК (' $ this-> pointer_to_foo = &$foo; ', а не' $ this-> pointer_to_foo = $ foo '). – MidnightLightning
Учитывая, что вы работаете с PHP5 (вы, если используете __construct как конструктор), не должно быть необходимости в знаке & sign: по умолчанию передаются объекты по ссылке –
Ха-ха, я не знаю, как я пропустил стиль PHP 5 конструкторы, я просто отменил использование «var» и отсутствие модификаторов доступа/видимости в методах. @MidnightLightning, если вы на самом деле используете PHP 5, Pascal MARTIN верен - вам не нужен ссылочный оператор. Извините за любую путаницу, которую я создал. –