PHP:печать неопределенных переменных без предупреждения
Вопрос
Мне просто интересно, есть ли быстрый способ повторить неопределенные переменные без получения предупреждения?(Я могу изменить уровень отчетов об ошибках, но я не хочу.) Наименьшее, что у меня есть на данный момент, это:
isset($variable)?$variable:''
Мне это не нравится по нескольким причинам:
- Это немного "многословно" и сложно
$variable
повторяется- Эхо пустой строки всегда меня немного раздражает.
- Имена моих переменных, вероятно, будут длиннее, например
$arrayvar['parameter']
Решение
вы могли бы использовать пример ifsetor(), взятый из здесь:
function ifsetor(&$variable, $default = null) {
if (isset($variable)) {
$tmp = $variable;
} else {
$tmp = $default;
}
return $tmp;
}
например:
echo ifsetor($variable);
echo ifsetor($variable, 'default');
Это не генерирует уведомление, поскольку переменная передается по ссылке.
Другие советы
Вы можете запустить его с помощью оператор подавления ошибок @.
echo @$variable;
Однако лучше не игнорировать незаданные переменные.Неустановленные переменные могут указывать на логическую ошибку в скрипте, и лучше всего убедиться, что все переменные установлены перед использованием.
echo @$variable;
Это давняя проблема с PHP, они намерены исправить это с помощью isset_or()
(или аналогичная функция) в PHP 6, надеюсь, эта функция появится и в PHP 5.3.На данный момент вы должны использовать пример isset() / ternary в своем вопросе, или же используйте префикс @, чтобы отключить сообщение об ошибке.ИМХО, это единственное обстоятельство, которое оправдывает использование @ в PHP.
Я бы не стал беспокоиться о проблемах со скоростью, используя echo
с пустой строкой, вероятно, дороже обернуть ее в if
предложение, чем просто повторять пустую строку.
неопределенные переменные очень распространены, я предлагаю вам сначала инициализировать переменную с помощью null
$var = null;
или отключите отчеты об ошибках для уведомлений:
error_reporting(E_ALL^E_NOTICE);
Подавление ошибок с помощью @-оператора заставляет интерпретатор изменять уровень ошибки, выполняя функцию, а затем изменять обратно уровень ошибки.Это сокращает время выполнения ваших скриптов.
Создание подобной функции устранит как минимум 3 из ваших причин:
function echoVar($var, $ret=NULL) {
return isset($var)?$var:$ret;
}
echoVar($arrayvar['parameter']);
Но зачем повторять неопределенные переменные?Это звучит как не очень хорошо закодированное...