Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Iterator nie implementujący interfejsu Iterator
bigZbig
post
Post #1





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Co sadzicie o uzyciu takiego rozwiazania do budowy klasy kolekcji oraz iteratora. Oczywiscie pare dodatkowych metod trzeba by bylo dorobic.

  1. <?php
  2.  
  3. class MyObiectColection
  4. {
  5. public $object1 = 'tu oczywiscie zamiast stringa bedzie obiekt1';
  6. public $object2 = 'obiekt2';
  7. public $object3 = 'obiekt3';
  8.  
  9.  
  10. protected $protected = 'protected var';
  11. private  $private  = 'private var';
  12.  
  13.  
  14. function addObject($name, $object) {
  15. $this->$name = $object;
  16. }
  17. }
  18.  
  19. $class = new MyObiectColection();
  20. $class->addObject('object4', 'obiekt4');
  21. $class->addObject('object5', 'obiekt5');
  22.  
  23. foreach($class as $key => $value) {
  24. print("$key => $value <br />\n");
  25. }
  26. ?>


Czy widziecie w tym jakies korzyści w stosunku do tradycyjnej klasy kolekcji bedacej obiektowa otoczka dla tablicy polaczonej z kolejnymi klasami implementujacymi interfejsy Iterator oraz IteratorAggregate? Jesli nie to jakie widzicie najwazniejsze wady (nie liczac definiowania wlasciwosci w funkcji nieazadeklarowanej w klasie)?

Zaznaczam ze idea tego pomyslu zostala zaczerpnieta z manuala
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
splatch
post
Post #2





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Cytat
Przecież nie stworzysz dynamicznie pól klas

można to obsłużyć za pomocą __get i __set traktując nazwę pola jako klucz w chronionej tablicy fields.
  1. <?php
  2. class MyCollection {
  3.  
  4. protected $fields = array();
  5.  
  6. public function __get($var) {
  7. return $this->fields[$var];
  8. }
  9.  
  10. public function __set($var, $val) {
  11. $this->fields[$var] = $val;
  12. }
  13.  
  14. public function setFields($fields) {
  15. $this->fields = array_merge($this->fields, $fields);
  16. }
  17. }
  18. ?>


Ten post edytował splatch 10.02.2006, 09:40:05
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: 9.10.2025 - 10:43