Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DirectoryIterator - czy nie zniknie?
Forum PHP.pl > Forum > PHP
grzesiek_g
Witam
Potrzebowałem funkcji do wylistowania podkatalogów w obrębie pewnego katalogu. Skorzystałem z DirectoryIterator, sprawdzanie czy jest to katalog napisałem w ten sposób:
  1. <?php
  2. if (!$child->isDot() && $child->isDir())
  3. ?>

Dostałem błąd niezdefiniowanej funkcji DirectoryIterator::isDir().
Niestety jak mi później manual powiedział:
Cytat
(PHP 5 <= 5.1.1)
, mam wersję 5.2.X PHP.

Pytanie jest następujące, czy z czasem nie wyrzucą całkowicie tego iteratora z SPL?
Chyba, że komuś są znane testy, że to było rozwiązanie wysoce nieoptymalne i dlatego porzucili tą metodę w bibliotece, to by wiele tłumaczyło.
sf
Przejrzyj changelog.
grzesiek_g
Changelog nic nie mówi http://pl.php.net/ChangeLog-5.php, ani słowa o metodach, które zostały usunięte - po prostu wyparowały. Zresztą jak widzę z wersją PHP 5.1.2 wyparowało i kilka innych metod tego iteratora.
nitro18
tego iteratora na pewno nie wyrzucili bo jedna z moich klas z niego korzysta.
jang
  1. <?php
  2. ?>

  1. PHP Version 5.2.3-1+lenny1

  1. SPL
  2. SPL support enabled
  3.  
  4. Interfaces Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
  5. Classes AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator,
  6.  
  7. DirectoryIterator,
  8.  
  9. DomainException, EmptyIterator, FilterIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator,
  10. LengthException, LimitIterator, LogicException, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException,
  11. ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveDirectoryIterator, RecursiveFilterIterator,
  12. RecursiveIteratorIterator, RecursiveRegexIterator, RegexIterator, RuntimeException, SimpleXMLIterator, SplFileInfo, SplFileObject,
  13. SplObjectStorage, SplTempFileObject, UnderflowException, UnexpectedValueException
mike
~jang co z Twojego posta wynika? Nic.
Jak masz pisać zbędne posty to nie pisz ich wcale.

~grzesiek_g pokaż kod. Może mas błąd.
Z biblioteki SPL nic nie było usuwane, więc to nie problem z PHP.
I zacytuj błąd, może źle go tłumaczysz.

I gwoli ścisłości: Klasa DirectoryIterator nigdy nie posiadała funkcji isDir().
Funkcja ta pochodzi z klasy SplFileInfo, po której DirectoryIterator dziedziczy.
grzesiek_g
@mike
Co nie zmienia faktu, że została usunięta. http://pl.php.net/manual/pl/function.Direc...rator-isDir.php. Kod przerobiłem już na wykorzystanie funkcji PHP is_dir(), błąd przetłumaczyłem dobrze niestety. Sprawdzałem i z metodą isDir() oraz !isFile(), poza tymi metodami wg manuala zniknęło jeszcze kilka.
Nie rozumię działania deweloperów PHP, mam nadzieję, że przy kolejnej wersji nie zniknie całkowicie DirectoryIndex...

@jang
Nie rozumię o co chodzi w tych listingach. Chcesz mi pokazać, że PHP 5.2.X jest DirectoryIterator? Przeczytaj mój pierwszy post. Jak widzisz używam tam tego iteratora, ale w połączeniu z inną metodą.
mike
Cytat(grzesiek_g @ 9.12.2007, 18:08:29 ) *
@mike
Co nie zmienia faktu, że została usunięta. http://pl.php.net/manual/pl/function.Direc...rator-isDir.php.
Co z kolei nie zmienia faktu ze poniższy kod, u mnie działa:
  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5.  
  6. foreach (new DirectoryIterator('.') as $fileInfo) {
  7. if (!$fileInfo->isDir()) {
  8. echo $fileInfo->getFilename() . "\n";
  9. }
  10. }
  11. ?>
Mam 5.2.5
grzesiek_g
[@b]mike[b]
Masz rację, że działa. U mnie też to działa. Wniosek jest taki, że musiałem zrobić błąd w nazwie metody, najprawdopodobniej dałem "_" zamiast zapisu "wielbłądziego". Głupi błąd ...sad.gif Musiałem za długo wczoraj pracować.
BaN
W manualu prawdopodobnie jest błąd odnośnie dostępności tej funkcji. Sprawdzałem czy jest dostępna (za pomocą get_class_methods) w PHP 5.1.6 i 5.2.5 i okazało się że ta metoda nie została usunięta 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.