Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » [PHP] Как реализовать рекурсию в методе класса

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

SHIRATANI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общем пишу класс который получает полный путь до каталога и выдаёт различную информацию о файлах и папках в этом каталоге.
 
Так как все методы класса так или иначе работают с путём до каталога, то я использую
такой простой конструктор
 

Код:
 
 
function InfoOfDir($dir)
  {  
    $this->nameofdir = $dir;
  }
 

 
Вот хочу реализовать в одном из методов такую вот функцию
 

Код:
 
function gts ($dir)  
  {
      global $size;
       if (is_dir($dir)) {  
       if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
               if (($file!='.') && ($file!='..')) {
                     $f=$_SERVER['DOCUMENT_ROOT']."/$dir/$file";
                     if (filetype($f)=='dir') { gts ("$dir/$file/"); }
                     if (filetype($f)!='dir') { $size=$size+filesize($f); }
               }
         }
       closedir($dh);
    }
 }
}
 

 
Эта функция взята из раздела 'PHP: Полезные (интересные и оригинальные) решения '
она подсчитывает вес директории.
 
Только не очень понятно, как её засунуть в класс.
 
Как правильно выбрать аргумент для этой функции что бы ее можно было вызвать рекурсивно?

Всего записей: 50 | Зарегистр. 06-12-2007 | Отправлено: 03:19 17-10-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SHIRATANI
речь об этой и той же вещи - зачем создали новую тему??

Цитата:
Только не очень понятно, как её засунуть в класс.  

так и засунуть.. вызывая внутри как  
$this->функция

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:27 17-10-2009
SHIRATANI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Не много не точно сформулировал проблему, извините.
ИМХО вопрос по сути касается любой рекурсивной функции возвращающей числовое значение, то есть не особо важно что мы подсчитываем на каждом шаге рекурсии(файлы, каталоги или что то ещё), а нужно что бы метод возвращал не промежуточные значения, а  конечный результат.
 
 
В общем засунуть рекурсивную функцию в класс не особо сложно.
 
Я например сделал так  
 

Код:
 
function WeightOfDir($dir_name)
  {
   if ($dir_name == '')
      {
        $dir_name = $this->nameofdir;
      }
   if ($dh = opendir($dir_name))  
      {
        while (($file = readdir($dh)) !== false)  
              {
                if (($file!='.') && ($file!='..'))  
                   {
                     $f=$dir_name . $file;
                     if (filetype($f)=='dir') { $this->WeightOfDir ($f.'/'); }
                     if (filetype($f)!='dir') { $size=$size+filesize($f); }
                   }
              }
       closedir($dh);
       print $size;
       print "<BR>";
      }
  }
 

 
Но в итоге я получаю ряд значении, и если их все сложить, то и получиться размер
каталога.
 
А очень хочется что бы метод возвращал размер каталога сразу.
Как это можно реализовать?

Всего записей: 50 | Зарегистр. 06-12-2007 | Отправлено: 23:41 17-10-2009 | Исправлено: SHIRATANI, 23:50 17-10-2009
NeXcr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробуй http://ru2.php.net/manual/en/directoryiterator.getsize.php , может там это реализовано (тоже через рекурсию), а еще лучше - system()

Всего записей: 10 | Зарегистр. 05-03-2006 | Отправлено: 14:14 18-10-2009 | Исправлено: NeXcr, 14:15 18-10-2009
SHIRATANI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NeXcr
Нихочу пользоваться никакими системными функциями.
К тому же не очень помню какой Unix командой можно вывести размер директории.
 
Ссылка данная вами интересна, но относиться к php5, а хочется универсального решения работающего и на php4.
 
И основной интерес составляет вопрос, как лучше изменить привиденную выше рекурсивную функцию,
что бы она возвращала не промежуточные результаты, а сразу размер директории.

Всего записей: 50 | Зарегистр. 06-12-2007 | Отправлено: 16:02 18-10-2009 | Исправлено: SHIRATANI, 16:24 18-10-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » [PHP] Как реализовать рекурсию в методе класса


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru