Блог web-разработчика

Личные заметки из области web-разработки, программирования, администрирования, IT

Результат выполнения функции с ненадлежащими аргументами в PHP 5.3

| Нет комментариев

При переходе с версии 5.2 на 5.3 заметил отличия в результатах выполнения функции, если в нее передать «неожидаемые» аргументы.

Например, если значение параметра равно null:

<?php
$arr = null;
echo array_search('1', $arr);
?>

В PHP 5.2 этот код вернёт (bool) false, однако в 5.3null.

«Неверное» значение параметра функции:

<?php
$num = '';
echo number_format($num, 5);
?>

В случае версии 5.2 возвращает (string) «0.00000″, 5.3null. Стоит заметить, что, если $num является float-числом в string-представлении, например,

$num = '4.45645789';

, функция отработает верно.
Данные изменения могут серьезно попортить логику «плохо-написанной» программы.

Например, есть конструкция вида:

<?php
$arr = array();
$arr2 = array();
while ( ($row = $db->get_row()) !== false ) {
  $p = array_search($row['id'], $arr['id']));
  if ($p === FALSE) $arr2[] = $row['id'];
  $arr['id'][] = $row['id'];
}
?>

В 5.2 результат $p в первой итерации действительно будет false. Но в 5.3 будет null, так как $arr['id'] равен null, и значение не добавится в $arr2. Естественно, правильно здесь в строке 1 нужно писать

$arr = array('id'=>array());

. Но имеем что имеем. В общем, поиски, почему теперь в этих случаях возвращается null, пока не увенчались успехом.

Также задал вопрос здесь.

Добавить комментарий

Обязательные поля отмечены *.

*

* Copy this password:

* Type or paste password here:

6,297 Spam Comments Blocked so far by Spam Free Wordpress