Biorąc pod uwagę następujących w PHP:Odsyłacz do metody obiektu kontenerowego w 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);
Zastanawiam się, czy to możliwe, że klasa „bar” do wywołania „magiczny” metodę klasy „foo”. Instancja "bar" jest zawarta w instancji "foo", ale nie znajduje się w relacji rodzic/dziecko z nią. W rzeczywistości mam wiele różnych klas "bar", które "foo" ma w tablicy, każda robi coś innego niż $ id, zanim chce przekazać ją do funkcji "magic_bullet" dla wyniku końcowego, więc nie ma struktury zmiana relacji klasowych, czy możliwy jest dostęp do metody instancji "kontenera"?
Genialny! To działa dla mojej instalacji, powyżej innych sugestii dodawania wskaźnika do instancji foo dla instancji paska, ponieważ zakładając wiele instancji "słupkowych", nie chcę mieć COPIES instancji foo wewnątrz instancji paska (dodatkowe użycie pamięci, plus jeśli oryginalna instancja testowa $ zmieni coś, co zmodyfikowało zachowanie 'magic_bullet', wszystkie kopie byłyby nieaktualne), chcę REFERENCJĘ (' $ this-> pointer_to_foo = &$foo; ', a nie' $ this-> pointer_to_foo = $ foo '). – MidnightLightning
Biorąc pod uwagę, że pracujesz z PHP5 (jesteś, jeśli używasz __construct jako konstruktora), nie powinno być potrzeby znaku &: obiekty są przekazywane domyślnie przez odniesienie –
Haha, nie wiem jak przeoczyłem styl PHP 5 konstruktorów, właśnie wykluczyłem użycie 'var' oraz brak modyfikatorów dostępu/widoczności na metodach. @MidnightLightning, jeśli faktycznie używasz PHP 5, Pascal MARTIN jest poprawny - nie potrzebujesz operatora referencyjnego. Przepraszam za wszelkie zamieszanie, które stworzyłem. –