<?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)) )
Что это за сравнение? Как расшифровывается строка?
Спустя 2 минуты, 22 секунды (27.04.2012 - 21:25) inpost написал(а):
while($e = readdir($d))
Вот так расшифровывается!
Спустя 7 минут, 2 секунды (27.04.2012 - 21:32) kilogram написал(а):
Я про вот это что такое за сравнение false !==
Спустя 1 час, 21 минута, 44 секунды (27.04.2012 - 22:53) sergeiss написал(а):
kilogram - вот тут: http://ru2.php.net/manual/ru/language.oper....comparison.php
Спустя 7 минут, 24 секунды (27.04.2012 - 23:01) kilogram написал(а):
Цитата |
!== - данные не должны быть эквивалентны |
while(false !== ($e=readdir($d)) )
Если $e не равно типу бул, значению фолс. А зачем здесь проверять на тип?
Какие элементы с какими проверяются?
Спустя 46 минут, 1 секунда (27.04.2012 - 23:47) inpost написал(а):
Я же сказал, что $e !== false, не равна она после присваивания ей значений внутри скобок.
Спустя 7 часов, 7 минут, 19 секунд (28.04.2012 - 06:54) sergeiss написал(а):
Цитата (kilogram @ 28.04.2012 - 01:01) |
А зачем здесь проверять на тип? |
Для того, чтобы не попасть на грабли. Потому что при сравнении != или == будет проводиться "приведение типов", а при сравнении !=== и === "приведения типов" не будет, а будут сравниваться и величины, и типы.
Поясняю на примере.
$a=0;
$b=false;
if( $a == $b ) // сравнение будет "истиной", т.к. при "0" при приведении к логическому типу станет "false"
{ .... }
if( $a === $b ) // сравнение будет "ложь", т.к. данные разных типов!!!
{ ... }
Некоторые функции могут вернуть false как индикатор ошибки и "ноль" как число, результат какой-то обработки данных. Для различения этих состояний такие сравнения как раз и нужны.