Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jaki obiekt wywołał metodę innego obiektu
Forum PHP.pl > Forum > PHP > Object-oriented programming
deirathe
Czy można w jakikolwiek sposób sprawdzić w jakim obiekcie została wykonana dana metoda?
Np powiedzmy mamy dane jak poniżej:
  1. <?php
  2. class Test
  3. {
  4.      public function metoda()
  5.      {
  6.           echo "zostalam wywolana w obiekcie ";
  7.      }
  8. }
  9. class Wywolujacy
  10. {
  11.     public function wywolaj(Test $obj)
  12.     {
  13.           $obj->metoda();
  14.      }
  15. }
  16. $wywolywacz = new Wywolujacy();
  17. $test = new Test();
  18. $wywolywacz->wywolaj($test);
  19. ?>

No i chcialbym uzyskac odpowiedz: zostalam wywolana w Wywolujacy
Wydaje mi się że nie ale jeżeli ktoś wie czy można to zrobić i jak to prosiłbym o wsparcie.
blooregard
W klasie dodajesz właściwość, np. private $classname = 'Test';

A potem:
  1. <?php
  2. public function metoda()
  3.     {
  4.          echo "zostalam wywolana w obiekcie klasy " . $this->classname;
  5.     }
  6. ?>

Ale nie wiem, czy o takie rozwiązanie Ci chodzi, czy bardziej "zautomatyzowane"
230005
  1. <?php
  2. class Test
  3. {
  4.      public function metoda($string)
  5.      {
  6.           echo "zostalam wywolana w obiekcie ".$string;
  7.      }
  8. }
  9. class Wywolujacy
  10. {
  11.     public function wywolaj(Test $obj)
  12.     {
  13.           $obj->metoda(__class__);
  14.      }
  15. }
  16. $wywolywacz = new Wywolujacy();
  17. $test = new Test();
  18. $wywolywacz->wywolaj($test);
  19. ?>


O to chodzi?
deirathe
Coś takiego istnieje http://pl2.php.net/manual/en/function.get-called-class.php

Ale niestety od 5.3 a póki co :/ potrzebuje wiedzieć jaki obiekt wykonał bez przekazywania żadnych informacji po prostu mam klasę ze statyczną metodą i inny obiekt wykonuję tę metodę i już wiem jak on się nazywa
230005
Hmmm to o co ci chodzi to jest refleksja (funkcjonuje ten mechanizm np. w javie) i php raczej nie posiada takich mechanizmów - prócz tej funkcji (i może kilku innych, nie wiem, nie znam się tongue.gif), która jest dostępna od 5.3. Sądzę zatem, że póki co nie da się osiągnąć tego co byś chciał.
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.