Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] tworzenie iteracji w obiekcie
Forum PHP.pl > Forum > Przedszkole
cesyn
Witam wszystkich,

Mam takie pytanie chcę uzyskać taki efekt;
  1. Dirs Object
  2. (
  3. [wynik] => Array
  4. (
  5. [0] => Array
  6. (
  7. [name] => ..
  8. [path] => /
  9.  
  10. )
  11.  
  12. [1] => Array
  13. (
  14. [name] => plik2.doc
  15. [path] => /var/hhh
  16.  
  17. )
  18.  
  19. [2] => Array
  20. (
  21. [name] => plik.doc
  22. [path] => /home/
  23.  
  24. )
  25.  
  26. )
  27.  
  28.  
  29. )


Czy wykonanie tego w taki sposób jest zgodne z oop?
  1.  
  2. class Dirs {
  3.  
  4. function Dirs()
  5. {
  6.  
  7. }
  8. function setName($name)
  9. {
  10. $this->nazwa=$name;
  11. }
  12. function setPath($path)
  13. {
  14. $this->sciezka=$path;
  15. }
  16. function wyk()
  17. {
  18. $this->wynik[] = array('name'=>$this->nazwa,'path'=>$this->sciezka);
  19. }
  20. }
  21. class Jakas{
  22.  
  23. function Jakas()
  24. {
  25. require_once('dirs.class.php');
  26. $dirs = new Dirs();
  27. $this->dirs = $dirs;
  28.  
  29. $this->dirs->setName("..");
  30. $this->dirs->setPath('/');
  31. $this->dir->wyk();
  32.  
  33. $this->dirs->setName("plik2.doc");
  34. $this->dirs->setPath('/var/hhh');
  35. $this->dir->wyk();
  36.  
  37. $this->dirs->setName("plik.doc");
  38. $this->dirs->setPath('/home/');
  39. $this->dir->wyk();
  40. }
  41. }


Z góry dziękuję za wszystkie sugestie party.gif

Pozdrawiam
everth
Na moje śpiące oko nie jest. Oblukaj sobie poniższe:
  1. class Dirs extends ArrayObject {
  2. public $name;
  3. public $path;
  4.  
  5. function __construct($name,$path) {
  6. $this->name;
  7. $this->path;
  8. }
  9.  
  10. function offsetSet($index=NULL, Dirs $value) {
  11. parent::offsetSet($index,$value);
  12. }
  13. }

Masz klasę Dirs która dziedziczy po ArrayObject, to oznacza że można ją traktować jako tablice. Można ją wielokrotnie zagnieżdżać.
  1. $root = new Dirs('root','/');
  2.  
  3. $root[] = new Dirs('porno','/porno');
  4. $root[] = new Dirs('erotyka','/erotyka');
  5.  
  6. $root[0][] = new Dirs('bdsm','/porno/bdsm');

I tak dalej. Można do tego dopisać kod który automatycznie tworzy ścieżki/validuje wprowadzone.
cesyn
Dzięki za odpowiedź, ale powiedzmy że nie chce korzystać z dobrodziejstw SPL i ten fragment kodu chciałbym napisać w PHP4. To mogłoby to tak wyglądać jak przedstawiłem w pierwszym poście czy nadal da się to zrobić w lepszy sposób?

Pozdrawiam
Crozin
Skąd tak durny pomysł by pisać cokolwiek pod PHP4? OOP w 4-ce można sobie darować (w 5-tce jest ono ubogie), ale jak już chcesz to lepszym pomysłem byłoby zrobienie jednego obiektu, który reprezentowałby kolekcje i dziesiątek obiektów (innej klasy), które by się do tej kolekcji wrzucało.
everth
W zasadzie to można zrobić tak - Filesystem to drzewo zawierające pliki i katalogi. Pliki zawsze są liśćmi drzewa a katalogi mogą być liśćmi lub być gałęziami. Mamy więc obiekty File i Dir (ten jest kolekcją), obie dziedziczą po jakiejś generycznej klasie która zapewnia pola wspólne im obu (czas dostępu, prawa,...) i wspólne metody. Dodatkowo File może też być dziedziczony przez subklasy (Image,Document,Raw, etc.). Jest tu wiele możliwości implementacji tego w OOP.

Nawet można się pokusić o zmapowanie tego drzewa na xml i przeszukiwanie go xpathem (np. "//MojDir/Photo[@mimetype='image/jpeg']). Ale to wymaga większej pracy i wątpię by na razie sobie z tym poradził.
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.