<rmcreative>

RSS

empty

28 января 2009

Один из гуру CakePHP сегодня довольно сильно удивил. У него нашёлся вот такой код:

if (isset($step['options']['merge']) && $step['options']['merge']) {
  // do stuff
}

Чтобы не делать всех проверок он придумал сначала делать так:

$step['options'] = array('merge' => false) + $step['options'];
if ($step['options']['merge']) {
  // do stuff
}

а потом даже вот так:

if (@$step['options']['merge']) {
  // do stuff
}

хотя можно было просто использовать empty:

if (!empty($step['options']['merge'])) {
  // do stuff
}

Комментарии RSS

  1. №1174
    Нурлан
    Нурлан 29 янв. 2009 г., 9:39:34

    Насколько я понимаю задача стояла избавиться от предупреждений о неинициализованных переменных (выводится в лог ошибок).

    В итоге он просто запретил вывод ошибок.

    empty не избавляет от этой ошибки.

  2. №1175
    DeadLy
    DeadLy 29 янв. 2009 г., 10:08:43

    Из мануала:

    empty() является противоположностью (boolean) var, за исключением того, что не появляется предупреждение, когда переменная не определена.

  3. №1176
    Нурлан
    Нурлан 29 янв. 2009 г., 10:14:32

    Прошу прощения, empty действительно не выводит предупреждение, если переменная не определена.

    Почему-то в памяти отложилось, что можно использовать только isset.

  4. №1178
    Морозов
    Морозов 29 янв. 2009 г., 12:19:28

    Вариант с @ мне нравится как более универсальный вариант. В отличие от empty его можно запользовать для лаконичного сравнения не только с логическим true, а с чем угодно ('XMLHttpRequest' == @$_SERVER['HTTP_X_REQUESTED_WITH']). естественно, злоупотреблять не стоит.

  5. №1179
    DeadLy
    DeadLy 29 янв. 2009 г., 12:35:27

    Мне кстати не нравится в empty, что

    0 (0 как целое число)

    и

    "0" (0 как строка)

    считаются пустыми (((.

    Можно конечно свою функцию написать, но всё же.

  6. №1187
    Bibendi
    Bibendi 30 янв. 2009 г., 10:34:57

    Я считаю, что использование оператора @ допустимо только в случаях с файловыми операциями, таких как filesize() и т.п.

    В остальных же случаях чуть-чё это же будет просто ад для программера искать ошибку.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.