Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak odczytać automatycznie nazwy pól obiektu?
jafet
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Witam!

Czy ktoś z Was wie jak odczytać nazwy pól obiektu, jeśli były one ustawiane metodą __set?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Zależy mi na takim oto rozwiązaniu: Mam klasę View(). Dla obiektu tej klasy w kontrolerze ustawiam różne dane. Ponieważ może być ich zmienna liczba, dlatego nie chcę towrzyć stałych pól np $model1, $model2, zamiast tego używam metody __set do ich ustawiania. Teraz w metodzie show() chcę odczytać nazwy tych pól i przypisać je do szablonu Smarty. Próbowałem to zrobić funkcją get_class_vars(get_class($this)) ale okazało się, że odczytuje ona tylko pola predefiniowane wcześniej w klasie. Pól ustawionych za pomocą __set nie widzi (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Jeśli ktoś ma jakiś pomysł będę wdzięcny.

Oto kod:
  1. <?php
  2.  
  3. abstract class View
  4. {
  5. public function __construct()
  6. {
  7.  
  8. }
  9.  
  10. public function __set($pole, $extra_model)
  11. {
  12. $this->$pole = $extra_model;
  13.  
  14. }
  15.  
  16. function __get($nazwa)
  17. {
  18. return $this->$nazwa;
  19. }
  20.  
  21. }
  22.  
  23. class HTMLView extends View
  24. {
  25. protected $smarty;
  26.  
  27. public function __construct()
  28. {
  29. parent::__construct();
  30. $this->smarty = new Smarty();
  31.  
  32. }
  33.  
  34. public function show()
  35. {
  36.  
  37. $fields = get_class_vars(get_class($this));
  38.  
  39. foreach ($fields as $name => $value) {
  40.  
  41. if ($name!='tamplate' && $name!='smarty')
  42. {
  43. $pole = "'".$name."'";
  44. $this->smarty->assign($pole, $name); 
  45. }
  46. }
  47.  
  48. $this->smarty->display($this->tamplate);
  49.  
  50. }
  51.  
  52. public function __call($name,$param)
  53. {
  54. echo "Próbowałeś wywołać metodę której nie ma ".$name;
  55. }
  56. }
  57. ?>



A oto przykład użycia w kontrolerze:
  1. <?php
  2.  
  3. $hview = new HTMLView();
  4. $hview->lista = $lista;
  5. $hview->tamplate="'".$this->tpl_prefix."list.tpl'";
  6. $hview->show();
  7.  
  8. ?>


Myslę, że sprawa jest warta zachodu, bo czy przypiszemy jedną listę czy 15, klasa HTMLView za nas robiłaby całe przypisanie do Smarty. Poza tym kod jest zupełnie niezależny od danych pobranych z modelu.

Ten post edytował jafet 20.04.2006, 22:49:26
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 01:34