Просматривая исходный код проекта, которому я помогаю, я нахожу эту строку кода:
$id or $id = $this->id;
Кажется, что он работает нормально, и это своего рода обходной путь из-за отсутствия оператора / обработчика null coalesce в PHP 5. Ключевое слово ‘or’ способно выполнить такой код. Тем не менее, мне интересно, если это хорошая практика программирования на PHP. Как вы думаете? Это хорошая идея, чтобы написать такой ($x or $x = $y)
код?
Этот вопрос в основном самоуверенный, но вам удалось поднять действительный вопрос.
Просто для справки, в PHP 7 есть нулевой оператор объединения это делает это быстро и эффективно в 1 коротком коде:
$id = $id ?? -1;
или прикованный$id = $id ?? $this->id ?? -1
Как это сравнивает каждый
?? {arg} ?? {arg}
сisset()
Но почему бы не сделать это с или же заявление?
Pros
Cons
Если вы не до конца понимаете, как работает сравнение типов в 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
на самом деле, может создавать ошибки в коде.
Других решений пока нет …