операторы — Что означает @ $ a или $ a = … в PHP?

Я видел в библиотеке TwitterOAuth PHP этот код:

function __construct($http_method, $http_url, $parameters=NULL) {
@$parameters or $parameters = array();
//...
}

Что означает оператор или что означает в этом случае?

1

Решение

or оценивает правую часть ($parameters = array()) только если левая часть является ложным значением.

В этом случае это можно прочитать:

Задавать $parameters в array() если $parameters уже установлено

@ не имеет отношения к or, Это оператор подавления ошибок. В этом случае это позволяет вам проверить $parameters даже если $parameters еще не был назначен. Как правило, это может привести к ошибке, так как это довольно распространено передовая практика включить отчеты об ошибках при попытке чтения из переменной, которая еще не была назначена.

1

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

Это сокращение для

if( empty($parameters) ) {
$parameters = array();
}

Первая часть выражения $parameters выведет уведомление и оценит как ложное, если не заданы параметры $. Символ @ подавляет это уведомление. Обратите внимание, что, поскольку $ parameters является одним из параметров функции, он всегда будет установлен, поэтому подавление ошибок не требуется. Вторая часть выражения выполняется только в том случае, если первая часть имеет значение false.

В более общем смысле, при определении значения логического выражения, содержащего и ИЛИ (на верхнем уровне), PHP прекращает оценку, когда находит истинное значение.

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

if( true || $anything ) {
//will always be executed
}

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

1

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