Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prywatne wlasciwosci w singletonach
Forum PHP.pl > Forum > PHP > Object-oriented programming
piczu
Czy wie ktos jak sprawdzic, czy singleton ma dana prywatna wlasciwosc ?
Prubowalem ReflectionClass, ale chyba przy wywolaniu new ReflectionClass('class') nie tworzy nowego obiektu z powodu prywatnego konstruktora i getDefaultProperties zwraca pusta tablice.

Oto cala moja funkcja:
  1. <?php
  2. function private_property_exists($class, $property) {
  3. if (is_object($class)) $class = get_class($class);
  4. $reflection = new ReflectionClass($class);
  5. return array_key_exists($property, $reflection->getDefaultProperties());
  6. }
  7. ?>
dr_bonzo
To nie przekazuj klasy tylko obiekt i sprawdzaj jego wlasciwosci.
piczu
Co mi to da ? Przeciez zwykly obiekt nie posiada metody getDefaultProperties.
dr_bonzo
Sorry. Zagalopowalem sie.

Patrz na to:
  1. <?php
  2. function private_property_exists($class, $property)
  3. {
  4. if ( is_object($class) )
  5. {
  6. $class = get_class($class);
  7. }
  8.  
  9. $reflection = new ReflectionClass($class);
  10.  
  11. // print_r( $reflection->getDefaultProperties() );
  12.  
  13. return array_key_exists($property, $reflection->getDefaultProperties());
  14. }
  15.  
  16. class SingletonClass
  17. {
  18. static private $instance = null;
  19.  
  20. public static function getInstance()
  21. {
  22. if ( is_null( self::$instance ) )
  23. {
  24. self::$instance = new SingletonClass();
  25. }
  26.  
  27. return self::$instance;
  28. }
  29.  
  30. private function __construct()
  31. {
  32. $this->x = 'xxx';
  33. $this->y = 'YYY';
  34. }
  35.  
  36. private $x;
  37. public $y;
  38. }
  39.  
  40.  
  41. $answ = private_property_exists( 'SingletonClass', 'x' );
  42. var_dump( $answ );
  43. ?>


i zwraca:

Kod
bool( true );

Czyli dziala biggrin.gif
piczu
ale ze statyczna juz nie dziala
  1. <?php
  2. private static $x;
  3. ?>


a w singletonach uzywam i uzywa sie staticzne jesli sie nie myle.
bigZbig
Użyj function_exists
piczu
odswiezam ten temat bo nadal nie udalo mi sie tego rozwiazac, a nie wiem jak mam uzyc function_exists do tego celu
bigZbig
@piczu - wybacz niedoczytalem, ze chodzi o wlasciwosci i pomyslalem o metodach.
ActivePlayer
a jakies get_class_vars nie pomoze?
em1X
Cytat(ActivePlayer @ 12.06.2006, 10:08 ) *
a jakies get_class_vars nie pomoze?


ta funkcja zwraca publiczne pola klasy
tak sie zastanawiam sam ze sobą czemu autor chce wyswietlic cos, co z założenia miało być ukryte, niewidoczne i niedostępne :/
piczu
chcialem sobie ulatwic konfigurowanie wszystkich moich obiektow, ktore niestety sa singletonami smile.gif
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-2024 Invision Power Services, Inc.