Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Czy da się z poziomu obiektu wyświetlić nazwę obiektu/klasy w którym został stworzony ten obiekt?
Forum PHP.pl > Forum > PHP
xamil
Witam.

Pytanie jak w temacie plus przykładowy kod:
  1. <?php
  2. class a {
  3. function a {
  4.  $y=new b();
  5. }
  6. }
  7. class b {
  8. function b {
  9. echo 'Czy da się tu wyświetlić nazwę obiektu/klasy w którym został stworzony ten obiekt? Czyli w tym wypadku nazwę "a"';
  10. }
  11. }
  12. $x=new a();
  13. ?>
Ludvik
  1. <?php
  2.  
  3. class One {
  4. public function __construct() {
  5. $temp = new Two();
  6. }
  7. }
  8.  
  9. class Two {
  10. public function __construct() {
  11. }
  12. }
  13.  
  14. $o = new One();
  15.  
  16. ?>

Zobacz wyświetloną tablicę... Nazwa klasy tam jest smile.gif
xamil
No jest w args->function. Tylko, że jakoś mnie przeraża nazwa funkcji "debug_backtrace". To chyba nie jest funkcja z której powinno się korzystać wielokrotnie w kodzie. Poza tym przypuszczam, ze jest zasobożerna. Nie ma jakiejś bardziej wyspecjalizwoanej funkcji w kierunku wyciagnięcia tej informacji? Po prostu potrzebuje aby obiekt wiedział skąd został wywołany.
dr_bonzo
Cytat
Po prostu potrzebuje aby obiekt wiedział skąd został wywołany.

debug_backtrace robi to co chcesz osiagnac.
Mozesz ukryc ja pod inna nazwa, jesli cie az tak przeraza.

Poza tym w "normalnym" skrypcie nie potrzebujesz takich informacji.
xamil
Cytat(dr_bonzo @ 18.08.2006, 14:01 ) *
debug_backtrace robi to co chcesz osiagnac.
Mozesz ukryc ja pod inna nazwa, jesli cie az tak przeraza.
Miałem na myśli, że ta funkcja nie jest przeznaczona do tego co chcę otrzymać i po drugie, że jestem ciekaw jak bardzo jest zasobożerna? Czy jest sens ją używać w aplikacji czy lepiej obejść mój problem w inny sposób ale jej nie używając?
Cytat(dr_bonzo @ 18.08.2006, 14:01 ) *
Poza tym w "normalnym" skrypcie nie potrzebujesz takich informacji.
Piszę bardzo normalny "skrypt" w którym zależy mi na przeźroczystości działania.
Ludvik
Sprawdź to xdebugiem albo innym profilerem...

Ja obstaję przy zdaniu dr_bonzo: Taka funkcjonalność nie jest potrzebna na co dzień. Nawet nazwa funkcji Ci podpowiada, że jest stworzona do debugowania. Jak tak bardzo Ci zależy jednak na tym, to przekaż obiekt, wewnątrz którego tworzysz drugi, do konstruktora. Potem tylko get_class" title="Zobacz w manualu php" target="_manual. Powinno być szybciej...
dr_bonzo
Cytat
Piszę bardzo normalny "skrypt" w którym zależy mi na przeźroczystości działania.

YYYY?? ke?? Co to znaczy "przezroczystosc dzialania"?
Denver
Zawsze możesz klasie B podczas tworzenia jej egzemplarza przesyłać w argumencie stałą __CLASS__.
Prph
Witam,

Ja mam klase Controller we frameworku z ktorej dziedzicza wszystkie inne kontrolery aplikacji.

  1. <?php
  2. abstract class Controller
  3. {
  4. //inne metody uzyteczne przy szybkim budowaniu wlasnego kontrolera
  5.  
  6. public function getConfig()
  7. {
  8. }
  9. }
  10. ?>


Kiedy robie swoj kontroler, jest on postaci:

  1. <?php
  2. class MojKontroller extends Controller
  3. {
  4. public function pokazNowosci_Action()
  5. {
  6. $oConfig = $this->getConfig();
  7. // w tej chwili $oConfig powinien zawierac konfiguracje do akcji.
  8. }
  9.  
  10. /*
  11.    getConfig powinien wczytac konfiguracje z pliku katalog_konfiguracji/MojKontroler_pokazNowosc.php
  12.    ale zeby to zrobil musi wiedziec jaka metoda odwoluje sie do getConfig()
  13.   */
  14. }
  15. ?>


Jakis pomysl?
xamil
No właśnie niestety ja nie uzyskałem na to pytanie odpowiedzi a widać, że nie tylko ja uważam to za potrzebne. W tej chwili jedynym wyjściem jest sparametryzowanie getConfig()
dr_bonzo
Prph: a nie lepiej automatyczne (frameworkiem) zalaczyc ten konfig i zapisac go w $this->config? Przeciez zeby wywolac akcje musisz znac nazwe kontrolera i akcji, a jak to znasz to utworzysz sobie sciezke do pliku.
Prph
To jest jakies rozwiazanie, ale wolalbym, zeby framework nie musial wczytywac tego konfiga
Jezeli nic lepszego nie wymysle, to tak zrobie.

Edit:

To jednak problemu nie rozwiaze. Bo i tak z metody musze odwolywac sie:

  1. <?php
  2. $oConfig->mojaAkcja->opcja;
  3. ?>


I nie kombinujac, tak bede musial zrobic, poniewaz sam kontroler ma takze miec mozliwosc ustawiuania konfiguracji, tj:

  1. <?php
  2. $a = array
  3. (
  4. 'opcja1' => 'wartosc1',
  5. 'akcje' => array
  6. (
  7. 'PokazNowosc' => array
  8.  (
  9.  'opcja1' => 'wartosc1'
  10.  )
  11. )
  12. );
  13. ?>


Adrian.
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.