Большая проблема в том, что эта функция довольно бессмысленна. Давайте заменим это реальным (гипотетически работающим) примером:
function isAnd($var, $value, $operator = '==') {
return isset($var) && $var $operator $value;
}
isAnd($foo, 1, '===');
В этом примере $foo
не установлено. Вы получите ошибку, потому что пытаетесь передать несуществующую переменную ($foo
) в функцию (isAnd
). Итак, вам нужно будет проверить $foo
для isset
до того, как позвонит isAnd
:
isset($foo) && isAnd($foo, 1, '===');
Итак, любая переменная, которая когда-либо входит в функцию isAnd
, определенно установлена. Вам не нужно проверять это внутри функции. Так что все упражнение довольно бессмысленно.
Что может сбить с толку, так это то, что isset()
и empty()
не имеют этого ограничения, т. Е. Вы можете передать им несуществующую переменную без ошибок. Дело в том, что это не обычные функции, а специальные языковые конструкции (которые выглядят как функции; обвиняют PHP). К сожалению, вы не можете создавать такие конструкции, параметры для ваших функций всегда должны существовать.
Вы должны просто привыкнуть к написанию isset($foo) && $foo === 1
. С правильно структурированным кодом вы можете уменьшить его до минимума, всегда объявляя все переменные, которые вы собираетесь использовать, что в любом случае является хорошей практикой.
Для динамического оператора ... вам понадобится какая-то форма if ... else
где-нибудь, чтобы решить, какой оператор все равно использовать. Вместо того, чтобы устанавливать переменную оператора и затем оценивать ее, не проще ли выполнить оценку прямо здесь?