Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Obiekt w zmiennej
Forum PHP.pl > Forum > Przedszkole
arek123
Witam. Mam np. coś takiego

  1. class pokaz {
  2.  
  3. function LiczTekst($tekst) {
  4.  
  5. return strlen($tekst);
  6.  
  7. }
  8. etc..
  9.  
  10. }


i jak zrobić tak aby podczas dziedziczenia można było się odnosić do metod tej klasy np. w taki sposób:
  1. class czlowiek extend klasa{
  2. function imie() {
  3. return $this->wyswietl->LiczTekst('Janusz');
  4. }
  5.  
  6. }


Czyli moje pytanie brzmi jaki sposób przypisać do zmiennej klase tak aby można było później odwoływać się do tej klasy po przez tą zmienną: $this->wyswietl->METODA(); questionmark.gif
Nie interesuje mnie samo: $this->metoda();

Pozdrawiam serdecznie!
thek
Zależy czy klasa czlowiek jest klasą potomną klasy pokaz. Jeśli tak to poczytaj o chainingu. W skrócie chodzi o to, by każda metoda miała: return $this; wtedy przekazywać możesz kolejnym metodom instancję obiektu łańcuszkiem. A dlaczego tak? Pomyśl smile.gif Metoda LiczTekst jest wykonywana tylko gdy wywołuje ją obiekt danej klasy i jej klasy potomnych (o ile nie jest przez nie przesłonięta). Tak więc musi być wywoływana jako $this->LiczTekst... ale jeśli $this jest jednocześnie jako return z innej metody, to można to potraktować jako ciągłość. Dlatego też ta właściwość jest nazywana "chaining", ponieważ umożliwia łączenie metod w łańcuch, gdzie wyjście jednej jest jednocześnie wejściem dla kolejnej.

Oczywiście ma to sens tylko w przypadku metod, które teoretycznie nie powinny zwracać określonej wartości oczekiwanej, bo po co mam zwracać cały obiekt przykładowo w metodzie getName? wink.gif Jest to jednak idealne do setterów, które mogą przekazywać sobie obiekt klasy i ciurkiem ustawiać określone atrybuty klasy, czyli to o co w sumie Ci chodzi.
A tak offtopem... Jak dla mnie połączenie wyświetlania i liczenia to trochę niezbyt logiczna kombinacja. Albo coś wyświetlasz na jakimś urządzeniu wyjściowym, albo coś liczysz.

Jeśli zaś chcesz by zmienna wyswietl miała metody innej klasy to... przypisz jej ten obiekt. Czyli $this->wyswietl = new pokaz(); Myślę, że coś takiego można już na etapie konstruktora klasy zrobić.
tab
tak naprawde to tu nie ma zadnej logiki. sam pomysl polega na tym ze metoda zwraca instancje obeiktu, przez co nie musimy caly czas przed nazwa metody pisac nazyw obiektu ktory ma ja wywolac.

przykładowo:

  1. class Output
  2. {
  3. public function Hello ()
  4. {
  5. echo 'Hello ';
  6. return $this;
  7. }
  8. public function World ()
  9. {
  10. echo 'World';
  11. }
  12. }


$output = new Output;
$output->Hello()->World();

zwroci: Hello World
arek123
Dzięki Panowie. Rozwiązałem to chwile po założeniu tematu. Klasa podsawowe to np. smarty dla widoku wink.gif

  1. require_once('Lib/Smarty/Smarty.class.php');
  2. class widok {
  3. public $widok;
  4. public function _construct() {
  5. return $this->widok=new widok;
  6. }
  7. }
  8.  
  9. class cos extends widok {
  10. function imie() {
  11. echo $this->widok->assign('title','Imię');
  12. }
  13. }


Pozdrawiam!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.