PHP - лучшие практики оценки IF-операторов - PullRequest
3 голосов
/ 21 марта 2009

Рассмотрим следующее

if(!count($_POST)) { echo 'something'; }
if(empty($_POST)) { echo 'something'; }
if(!$_POST) { echo 'something'; }

Каждая строка выше делает одно и то же. Я не уточнил, какой из них я использую. Должен ли я быть более конкретным? Это действительно имеет значение?

Ответы [ 3 ]

9 голосов
/ 21 марта 2009

Я бы использовал это:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // POST request
}
1 голос
/ 21 марта 2009

Если вы хотите проверить, был ли запрос сделан с помощью запроса POST, то проверка $ _SERVER ['request_method'] - это путь.

Если вы хотите выяснить, является ли массив пустым, есть некоторые различия:

  • пусто ()

Пустой проверит, является ли переменная «пустой». PHP считает следующие значения пустыми:

*  "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

Пустой является языковой конструкцией, что означает, что вы не можете использовать его в качестве обратного вызова, поэтому следующее не удастся:

$var = array(); call_user_func('empty', $var);

Он также проверяет только переменные, поэтому следующее также приведет к фатальной ошибке:

if (empty(array()) { // do something }

Это также быстрее, чем считать, но это не должно заставлять вас думать об этом над остальными.

  • Количество () * * один тысяча двадцать-одна

Count - это "нормальная" функция, она сначала приводит параметр к массиву и проверяет, не является ли он пустым. Лично я бы использовал это для проверки пустых массивов.

  • if ($ value) {// сделать что-то}

Это немного отличается от count, потому что здесь значение $ будет приведено к логическому значению, а из-за того, что пустые массивы приведут к false, будет достигнут тот же результат, что и для count.

Из-за кастинга задействован очень большой улов:

$var = ''; // empty string
var_dump(empty($var)); // returns true
var_dump(count($var)); // returns false
1 голос
/ 21 марта 2009

Я всегда предпочитал использовать empty(), поскольку он возвращает True, если переменная аргумента либо не установлена, либо установлена, но оценивается как False (что будет пустой массив). Это спасает мой разум и заменяет эквивалент if(!isset($_POST) || !$_POST) { echo 'something'; }, который только что упомянут хаос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...