оператор if — Использует ли ‘или’ для проверки на ноль хорошую практику программирования на PHP?

Просматривая исходный код проекта, которому я помогаю, я нахожу эту строку кода:

$id or $id = $this->id;

Кажется, что он работает нормально, и это своего рода обходной путь из-за отсутствия оператора / обработчика null coalesce в PHP 5. Ключевое слово ‘or’ способно выполнить такой код. Тем не менее, мне интересно, если это хорошая практика программирования на PHP. Как вы думаете? Это хорошая идея, чтобы написать такой ($x or $x = $y) код?

0

Решение

Этот вопрос в основном самоуверенный, но вам удалось поднять действительный вопрос.

Просто для справки, в PHP 7 есть нулевой оператор объединения это делает это быстро и эффективно в 1 коротком коде:

$id = $id ?? -1; или прикованный $id = $id ?? $this->id ?? -1

Как это сравнивает каждый ?? {arg} ?? {arg} с isset()


Но почему бы не сделать это с или же заявление?

Pros

  1. Это коротко (1 подкладка)
  2. Довольно быстро и легко читается.
  3. Менее сложный, чем троичные операторы
  4. Скорее всего, быстрее в разборе кода

Cons

  1. Это очень обман

Если вы не до конца понимаете, как работает сравнение типов в PHP, это в конечном итоге вас укусит. Если вы подумали об этом, как isset() Вы совершенно неправы и неправильно прочитали бы код из-за этого. По этой причине я бы проголосовал против использования этого метода.


expression       if       isset    empty

$x = "";         FALSE    TRUE     TRUE
$x = null;       FALSE    FALSE    TRUE
var $x;          FALSE    FALSE    TRUE
$x (undefined)   FALSE    FALSE    TRUE
$x = [];         FALSE    TRUE     TRUE
$x = ['a', 'b']; TRUE     TRUE     FALSE
$x = false;      FALSE    TRUE     TRUE
$x = true;       TRUE     TRUE     FALSE
$x = 1;          TRUE     TRUE     FALSE
$x = 42;         TRUE     TRUE     FALSE
$x = 0;          FALSE    TRUE     TRUE
$x = -1;         TRUE     TRUE     FALSE
$x = "1";        TRUE     TRUE     FALSE
$x = "0";        FALSE    TRUE     TRUE
$x = "-1";       TRUE     TRUE     FALSE
$x = "php";      TRUE     TRUE     FALSE
$x = "true";     TRUE     TRUE     FALSE
$x = "false";    TRUE     TRUE     FALSE

Для полного списка таблицы вы можете увидеть этот ссылка на сайт.


Работает как !empty()см. следующий пример:

if(($id or $id = $this->id) > 0){
echo "Greater then 0";
}

if(($id = !empty($id) ? $id : $this->id) > 0){
echo "Greater then 0";
}

Большинство людей не знают об этом. Код не очевиден для чтения. Так что, хотя я прекрасно умею читать код сейчас, он будет немного более запутанным, когда я буду читать его в следующем месяце.

В этом коде также есть вопрос, если $this->id на самом деле, может создавать ошибки в коде.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]