Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pakowanie do tablicy tego co zwróci __get()
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,


Mam sobie klasę :

  1. class Window extends CreateExtObj {
  2.  
  3. function __construct(){
  4. parent::setExtObjName();
  5. $this->atrybut = 500;
  6. $this->atrybut1 = 100;
  7. }
  8.  
  9. protected $aFields = array ();
  10.  
  11. /*
  12.   function __construct($array) {
  13.   $this->aFields = $array;
  14.   }
  15.   */
  16. public function __set($sName, $sValue) {
  17. $this->aFields[$sName] = $sValue;
  18. }
  19.  
  20. public function __get($sName) {
  21. if(array_key_exists($sName, $this->aFields)) {
  22. print_r($this->aFields);
  23. return $this->aFields[$sName];
  24. } else {
  25. throw new Exception ('Field '.$sName.' doesn\'t exist!');
  26. }
  27. }
  28.  
  29. }


Która dziedziczy po innej klasie. I teraz chciałbym przekazać tablicę $this->aFields która jest tworzona w funkcji __get() do funkcji odziedziczonej która wygląda tak :

  1. function setExtObjParams($array) {
  2. $this->extObjParams = $array;
  3. }



Czy da się wogólę taki myk zrobić ?
No bo rozumiem że funkcja __get() coś zwraca ale nie mam pojęcia jak dalej tym zarządzać......

bo jak robie coś takiego :
  1. try {
  2. $window = new Window;
  3. $window->setExtObjParams(__get());
  4. $window->render();
  5. } catch (Exception $e) {
  6. echo 'Błąd: ', $e->getMessage(), "\n";
  7. }


To wywala mi błąd że funkcja __get jest undefined , no ale to magiczna funkcja więc nie wiem jak mam pobrać to co zwraca, chodzi mi o to żeby zapakować do tablicy to co zwróci __get() i przekazać to do funkcji setExtObjParams($array);

Serdecznie proszę o pomoc smile.gif
darko
Najpierw naucz się korzystać z magicznego gettera:

  1. class Test {
  2. protected $field1 = "field1";
  3. protected $field2 = "field2";
  4. // @TODO: dodać sprawdzanie za pomocą property_exists
  5. public function __get($prop_name) {
  6. return $this->$prop_name;
  7. }
  8. }
  9.  
  10. $test = new Test();
  11. echo $test->field1;
Wolfie
No tak, to juz przerabiałem,

Wiem że można w ten sposób pobierać parametry, ale chodzi mi o to żeby mi to automatycznie pobrało tyle parametrów ile zostało zdefoniowanych i zapakowało do tablicy, tak zebym nie musiał 'z palca' wypisywac wszystkich paramterów......da się tak ?
darko
Da się
Wolfie
Tę funkcję też już widziałem winksmiley.jpg


I tutaj jest z koleii za duzo zmiennych winksmiley.jpg

Bo wynik tej funkcji wygląda tak :

Cytat
Array ( [aFields] => Array ( [extObjName] => Window [width] => 500 [height] => 100 [title] => Tytuł ) )


A ja potrzebuję tylko :

Cytat
Window [width] => 500 [height] => 100 [title] => Tytuł


Czyli bez tablic i bez extObjName, ale takto będzie bardzo duzo parametrów.......
darko
Przefiltruj sobie tę tablicę pod kątem tego, co potrzebujesz i po problemie.
Wolfie
Ok, dzięki za podpowiedz, bardzo fajna klaska mi wyszła 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-2025 Invision Power Services, Inc.