Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Логическое выражение
 
 автор: kilogram   (27.04.2012 в 23:33)   письмо автору
 
 


<?php 
function sos($f1,$f2){
if(
is_dir($f1) && !is_dir($f2)) return -1;
if(!
is_dir($f1) && is_dir($f2)) return 1;
if(
$f1<$f2) return -1; elseif ($f1>$f2) return 1;
else return 
0;
}
$d opendir('.');
while(
false !== ($e=readdir($d)) )
   
$files[$e] = filesize($e);
uksort($files,"sos");  
print_r($files); 
?> 


НЕ понятно вот это место: while(false !== ($e=readdir($d)) )
Что это за сравнение? Как расшифровывается строка?

  Ответить  
 
 автор: Киналь   (27.04.2012 в 23:46)   письмо автору
 
   для: kilogram   (27.04.2012 в 23:33)
 

readdir($d) читает указанную директорию, возвращая либо имена файлов, либо false при достижении конца директории.
$e=readdir($d) присваивает переменной $e текущее имя файла.
false !== ($e=readdir($d)) проверяет достижение конца директории.

То есть в целом строчка означает «перебрать все файлы в директории».

  Ответить  
 
 автор: confirm   (27.04.2012 в 23:51)   письмо автору
 
   для: Киналь   (27.04.2012 в 23:46)
 

Нет, немного не так. )

  Ответить  
 
 автор: confirm   (27.04.2012 в 23:56)   письмо автору
 
   для: kilogram   (27.04.2012 в 23:33)
 

А так понятней будет?
<?
while (($e readdir($d)) !== false)

Здесь проверка на идентичность значений потому, что в ином случае, любой элемент каталога, чье имя может быть выражено как FALSE, остановит цикл (например, элемент с именем "0").

  Ответить  
 
 автор: Киналь   (28.04.2012 в 00:02)   письмо автору
 
   для: confirm   (27.04.2012 в 23:56)
 

И это немного не так)) Оператор «!==» проверяет тип, так что "0" не подойдёт.

  Ответить  
 
 автор: confirm   (28.04.2012 в 00:05)   письмо автору
 
   для: Киналь   (28.04.2012 в 00:02)
 

Вот именно, поэтому он и используется.

  Ответить  
 
 автор: Киналь   (28.04.2012 в 00:14)   письмо автору
 
   для: confirm   (28.04.2012 в 00:05)
 

Тьфу, неверно прочитал ваш пост, прошу прощения.

  Ответить  
 
 автор: confirm   (28.04.2012 в 00:16)   письмо автору
 
   для: kilogram   (27.04.2012 в 23:33)
 

Товарищ Киналь мне своим быстрым комментарием всю масленицу испортил )

А надо было добавить, что существует функция glob(), которая позволяет заменить весь этот бедлам вместе с сортировкой.
<?
foreach (glob("*.*",GLOB_NOSORT) as $filename) echo $filename."<br>";

  Ответить  
 
 автор: kilogram   (28.04.2012 в 00:44)   письмо автору
 
   для: confirm   (28.04.2012 в 00:16)
 

while(false !== ($e=readdir($d)) )


Здесь проверка переменной $e не равна ли она за типом типу false так как 2 знака равно после восклиц. знака?

  Ответить  
 
 автор: confirm   (28.04.2012 в 00:56)   письмо автору
 
   для: kilogram   (28.04.2012 в 00:44)
 

Проверку равенства === и неравенства !== еще называют строгой проверкой, так как проверяются на равенство/неравенство не только сами значения, но и их типы. Например:
<?
echo 1-'TRUE' 'FALSE';
echo 
'<br>';
echo 
1-!== false 'TRUE' 'FALSE';

В первом случае тип не проверяется и 0 как и положено вернет булево значение false, а во втором случае проверяется и тип, а 0, это не булев тип, а integer. Потому и результат во втором случае будет иной.

  Ответить  
 
 автор: kilogram   (28.04.2012 в 00:58)   письмо автору
 
   для: kilogram   (28.04.2012 в 00:44)
 

!== - данные не должны быть эквивалентны


while(false !== ($e=readdir($d)) )

Если $e не равно типу бул, значению фолс. А зачем здесь проверять на тип?
Какие элементы с какими проверяются?

  Ответить  
 
 автор: confirm   (28.04.2012 в 01:09)   письмо автору
 
   для: kilogram   (28.04.2012 в 00:58)
 

Я же выше привел выдержку из манула об этой функции, почему в данном случае применяется строгая проверка.
Здесь запись через "попу", может поэтому дико воспринимается.
Проверяем чему равно значение и тип переменной $e (что возвращает readdir).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования