Это ужасный код, и вы не должны его использовать, но по сути это плохо написанное NULL-объединение.Значение NULL объединяется в:
if( is_null($bar) ) {
$foo = 'some default or alternate value';
} else {
$foo = $bar;
}
Для лучшей читаемости:
$sysn = (
($sysn = $_SERVER["SERVER_ADDR"]) ?
$_SERVER["SERVER_ADDR"] :
$_SERVER["SERVER_NAME"]
);
Обратите внимание, что при оценке результата операции присваивания возвращается назначенное значение, а операции присваивания ассоциативно-правый , поэтому они связаны справа налево.
Более краткий пример:
$foo = ( $foo = $bar ) ? $bar : 'bar was unset';
// ^- NULL, which is false-y
var_dump($foo);
$bar = 'I am bar';
$foo = ( $foo = $bar ) ? $bar : 'bar was unset';
// ^- string, which is truth-y
var_dump($foo);
Вывод:
Notice: Undefined variable: bar in /in/q2A4n on line 1
string(13) "bar was unset"
string(8) "I am bar"
УведомленияНе следует игнорировать, они указывают, что вы делаете что-то не так.Не достаточно неправильно, чтобы остановить выполнение, но достаточно неправильно, чтобы потенциально вызвать проблемы где-то в будущем.
Если бы это было написано человеком со стандартами и способностью чувствовать стыд, это было бы:
$sysn = (
( isset($_SERVER["SERVER_ADDR"]) ) ?
$_SERVER["SERVER_ADDR"] :
$_SERVER["SERVER_NAME"]
);
Или в PHP> = 7 с оператором NULL, объединяющим :
$sysn = $_SERVER["SERVER_ADDR"] ?? $_SERVER["SERVER_NAME"]