lord_borsuk
7.02.2011, 09:51:31
Witam
Przeglądając ostatnio dokumentacje frameworków zauważyłem ze tam obiekty są używane z poziomu metod klas do których te obiekty nie zostały w żaden sposób przekazane, i moje pytanie brzmi jak coś takiego się robi ??
Wiem ze to średnio określiłem problem, ale nie mam bladego pojęcia jak to inaczej opisać ponieważ dopiero zaczynam z OOP, i trochę brakuje mi języka.
Umiem korzystać z google, ale nie wiem czego szukać, więc jak byście mogli mi podsunąć coś co by mnie naprowadziło mnie na rozwiązanie problemu był bym bardzo wdzięczny.
Crozin
7.02.2011, 09:57:22
Mógłbyś pokazać jakiś przykładowy kod?
smentek
27.02.2011, 22:28:13
Kosmici i czarna magia... Obiekty "używane z poziomu metod klas do których te obiekty nie zostały w żaden sposób przekazane" zostały przekazane w obiektach bazowych po które opisywane obiekty dziedziczą.
class A
{
protected $x;
public function setX( $x )
{
$this->x = $x;
}
public abstract sendToAnotherDimension( $z );
public function blackMagic()
{
$this->sendToAnotherDimension( 'Agent Mulder z archiwum ' );
}
}
class B extends A
{
/**
* Metoda frameworka (np kontroler) Klasy A wogole nie widzisz bo jest
* ona ukryta w bebechach systemu...
* @param string $caramba
*/
public function sendToAnotherDimension( $caramba )
{
//$x jest tutaj dostepny z powietrza (na pierwszy rzut oka)
echo $caramba . $this->x; }
}
$b = new B();
$b->setX('X');
$b->blackMagic();
klasa B dziedziczy x i setX z klasy A - tutaj wszystko jest w porządku.
Natomiast to, że w A nie ma zadeklarowanej metody sendToAnotherDimention (chociażby abstrakcyjnej) to już niedbalstwo programisty, niestety parser PHP nie uzna tego za błąd.
W momencie kiedy wywołujesz blackMagic jako metodę na instancji klasy B to sendToAnotherDimention() już tam jest.