Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Obiekt w zmiennej
arek123
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 10.11.2012

Ostrzeżenie: (0%)
-----


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(); (IMG:style_emoticons/default/questionmark.gif)
Nie interesuje mnie samo: $this->metoda();

Pozdrawiam serdecznie!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/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ć.
Powód edycji: [thek]: Ostatni akapit dodany po kilkukrotnym przeżuciu o co Ci może chodzić ;)
Go to the top of the page
+Quote Post
tab
post
Post #3





Grupa: Zarejestrowani
Postów: 75
Pomógł: 20
Dołączył: 8.10.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
arek123
post
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 10.11.2012

Ostrzeżenie: (0%)
-----


Dzięki Panowie. Rozwiązałem to chwile po założeniu tematu. Klasa podsawowe to np. smarty dla widoku (IMG:style_emoticons/default/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!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 17:39