Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywoływanie metody
Forum PHP.pl > Forum > PHP > Object-oriented programming
Jarod
Załóżmy, że jest jakaś przykładowa klasa.

  1. <?php
  2. class Klasa {
  3. public $wlasciwosc1;
  4. public $wlasciwosc2;
  5.  
  6. public function Metoda1() {
  7. $this->wlasciwosc1 = 'Wlasciwosc1';
  8. }
  9.  
  10. public function Metoda2() {
  11. $this->wlasciwosc2 = 'Wlasciwosc2';
  12. }
  13. }
  14.  
  15. $Obj = new Klasa;
  16. echo $Obj->wlasciwosc1;
  17. echo $Obj->wlasciwosc2;
  18. ?>


Często spotykam się z zapisem:
  1. <?php
  2. $uchwyt=$Obj->Metoda1->Metoda2
  3. ?>


Po co się tak pisze? Co znaczy takie wywołanie metody?
goffyy
Sadz ze metoda1 zwraca uchwyt do jaiegos innego obiektu i dlatego jest to tak uzywane.
Przykladowo:

  1. <?php
  2. class klasa_pierwsza {
  3.  
  4. function metoda1() {
  5. $uchwyt= klasa_druga::instance();
  6. }
  7. }
  8.  
  9. class klasa_druga {
  10. private static $instance;
  11.  
  12. static function instance() {
  13. if (!self::$instance) {
  14. self::$instance = new self();
  15. }
  16. return self::$instance;
  17. }
  18.  
  19. function tekst() {
  20. echo "jakis tekst";
  21. }
  22.  
  23. }
  24. ?>


Teraz wywolanie:

$klasa= new klasa_pierwsza();
$klasa->metoda1()->tekst();

wyswietli Ci tekst zdefiniowany w funkcji tekst.

Moze przyklad nie najlepszy ale mozna zobaczyc jak to dziala smile.gif
Jarod
Czyli wykonanie od lewj do prawej, najpierw metoda1() a później tekst().
Teoretycznie można napisać
  1. <?php
  2. $klasa->metoda1()->tekst()->metoda1()->tekst();
  3. ?>


Po co używasz self:: questionmark.gif
goffyy
Tutaj chodzilo o to zeby klasa utworzyla z siebie automatycznie obiekt i trzymala go w pamieci. Czyli aby nie powielac tej samej klasy a miec dostep do niej z kazdego miejsca przez wywolanie metody statycznej. Tutaj moze nie jest to potrzebne bo mozna bylo rownie dobrze uzyc new .... ale poprstu skopiowalem gotowy kod zeby nie pisac smile.gif

A i co do opcji:

$klasa->metoda1()->tekst()->metoda1()->tekst();

to tutaj by to bylo bledem poniewaz funkcja tekst ktora napisalem nie zwraca identyfikatora obiektu a wiec juz nie ma z czego wywolac metoda1().
ikioloak
metoda1() u ciebie rowniez nie zwraca instancji zadnej klasy wiec caly zapis jest bledny. Po krotce mozna powiedziec ze zapis
  1. <?php
  2. $obiekt->foo1()->foo2();
  3. ?>

stosuje sie zamiast
  1. <?php
  2. $temp = $obiekt->foo1();
  3. $temp->foo2();
  4. ?>

w momencie kiedy wywolanie foo1 jest nam potrzebne tylko po to zeby wywolac foo2
goffyy
Masz racje powinno w kodzie u mnie byc tak:

  1. <?php
  2. function metoda1() {
  3. return klasa_druga::instance();
  4. }
  5. ?>


Niestety jak sie na szybko pisze to sie popelnia czasem bledy smile.gif Przy takim ukladzie zadziala to co pisalem.
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.