Я видел в библиотеке TwitterOAuth PHP этот код:
function __construct($http_method, $http_url, $parameters=NULL) {
@$parameters or $parameters = array();
//...
}
Что означает оператор или что означает в этом случае?
or
оценивает правую часть ($parameters = array()
) только если левая часть является ложным значением.
В этом случае это можно прочитать:
Задавать
$parameters
вarray()
если$parameters
уже установлено
@
не имеет отношения к or
, Это оператор подавления ошибок. В этом случае это позволяет вам проверить $parameters
даже если $parameters
еще не был назначен. Как правило, это может привести к ошибке, так как это довольно распространено передовая практика включить отчеты об ошибках при попытке чтения из переменной, которая еще не была назначена.
Это сокращение для
if( empty($parameters) ) {
$parameters = array();
}
Первая часть выражения $parameters
выведет уведомление и оценит как ложное, если не заданы параметры $. Символ @ подавляет это уведомление. Обратите внимание, что, поскольку $ parameters является одним из параметров функции, он всегда будет установлен, поэтому подавление ошибок не требуется. Вторая часть выражения выполняется только в том случае, если первая часть имеет значение false.
В более общем смысле, при определении значения логического выражения, содержащего и ИЛИ (на верхнем уровне), PHP прекращает оценку, когда находит истинное значение.
Например, следующий оператор if будет всегда вводиться, а вторая часть выражения никогда не будет вычисляться:
if( true || $anything ) {
//will always be executed
}
В качестве примечания, я думаю, что лучше быть выразительным, чем умным. Код, который вы разместили, требует минимального набора текста, но даже если вы понимаете, что происходит, это может занять больше времени, чтобы понять.