Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: непонятня штука с функциеи glob()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dadli
Отправлено: 14 Августа, 2012 - 14:52:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




какаято непонятня штука с функциеи glob(). есть пустая директоря, сделаю так

PHP:
скопировать код в буфер обмена
  1. $mas = glob("адрес к дректорие *");
  2. var_dump($mas);
  3. echo sizeof($mas);



var_dump виведит: bool(false)
echo sizeof виведит 1, можете сказать в чом может бить дело ?
 
 Top
EuGen Администратор
Отправлено: 14 Августа, 2012 - 14:54:26
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




dadli
Все верно. Это происходит потому как sizeof ожидает массив или Countable-объект в качестве аргумента. И, стало быть, аргумент приводится к типу array - вот и выходит, что вызов аналогичен sizeof(array(false)) - то есть размер равен 1.
При этом не следует думать, что происходит явное приведение типов (то есть, передав, к примеру, два аргумента, Вы не получите результатом 2). Исключение составляет также null - для него будет возвращен 0.
Есть, правда, оговорка для объектов, которые реализуют Countable - но это не Ваш случай.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dadli
Отправлено: 14 Августа, 2012 - 15:19:03
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




EuGen
спасибо понятно, а как можно из sizeof(array(false)) получить 0 ? то есть как получить из таково масива, реалное количество елементов?

(Отредактировано автором: 14 Августа, 2012 - 15:19:33)

 
 Top
EuGen Администратор
Отправлено: 14 Августа, 2012 - 15:27:02
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




dadli
Так реальное количество его элементов и есть 1. Если нужно получить количество элементов, не равных false, то это другая задача. Пример её решения:
PHP:
скопировать код в буфер обмена
  1. $rgNil  = array(false, 0, '', null);
  2. $rgData = array(7, true, "foo", -1, 6.9, false, "\n", "", 0);
  3. var_dump(count($rgData), count(array_diff($rgData, $rgNil)));

Но если речь идет о count, которому передан не-массив, то там всегда будет 1 (или 0 для null)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dadli
Отправлено: 14 Августа, 2012 - 23:20:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




EuGen

спасибо балшое.

(Отредактировано автором: 14 Августа, 2012 - 23:24:00)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB