PHP: печать неопределенных переменных без предупреждения

Мне просто интересно, есть ли быстрый способ отображать неопределенные переменные без предупреждения? (Я могу изменить уровень сообщений об ошибках, но не хочу.) Наименьшее, что у меня есть, это:

isset($variable)?$variable:''

Мне это не нравится по нескольким причинам:

Это немного "многословно" и сложно$variable повторяетсяОтголоски пустой строки всегда раздражают меня.Мои имена переменных, вероятно, будут длиннее, например$arrayvar['parameter']
 DisgruntledGoat10 июл. 2009 г., 14:20
@esatis: я вообще не говорю о скорости ...
 e-satis19 дек. 2008 г., 11:32
На самом деле не очень хорошая идея. Если это кажется «немного« многословным »и сложным», то в будущем у вас будет какой-то сюрприз ... Это не может быть узким местом вашего приложения. Начните использовать хорошую привычку проверять вар. Сделайте свою собственную функцию, чтобы ускорить процесс, если хотите.

Ответы на вопрос(6)

Решение Вопроса

взятый изВот:

function ifsetor(&$variable, $default = null) {
    if (isset($variable)) {
        $tmp = $variable;
    } else {
        $tmp = $default;
    }
    return $tmp;
}

например:

echo ifsetor($variable);
echo ifsetor($variable, 'default');

Это не создает уведомление, потому что переменная передается по ссылке.

 Tom Haigh25 июн. 2009 г., 21:45
Не будет, потому что передается по ссылке.
 Ólafur Waage19 дек. 2008 г., 01:59
iirc все равно выдаст ошибку, так как php отправляет неопределенную переменную в функцию, даже если isset находится внутри нее.

давняя проблема с PHP, они намерены исправить это сisset_or() (или аналогичная функция) в PHP 6, надеюсь, эта функция также войдет в PHP 5.3. На данный момент вы должны использовать пример isset () / ternary в своем вопросе, или же использовать префикс @, чтобы отключить ошибку. ПО МОЕМУ МНЕНИЮ,это единственное обстоятельство, которое оправдывает использование @ в PHP.

Я не буду беспокоиться о проблемах со скоростью, используяecho с пустой строкой, вероятно, дороже обернуть его вif предложение, чем просто повторить пустую строку.

 nickf19 дек. 2008 г., 01:57
Я считаю, что @ полезно при выполнении соединений с базой данных или файловых операций, когда сбой может привести к ошибкам. например: "if ($ fh = @fopen ('myfile', 'w'))" - это позволяет вам изящно решать любые проблемы.

я предлагаю вам сначала инициализировать переменную с нуля

$var = null;

или отключите отчеты об ошибках для уведомлений:

error_reporting(E_ALL^E_NOTICE);

нять уровень ошибок, выполняя функцию, а затем возвращать обратно уровень ошибок. Это уменьшает время выполнения ваших скриптов.

Создайте такую ​​функцию, чтобы устранить по крайней мере 3 из ваших причин:

function echoVar($var, $ret=NULL) {
    return isset($var)?$var:$ret;
}

echoVar($arrayvar['parameter']);

Но зачем выводить неопределенные переменные? Это звучит как не очень хорошо закодировано ...

 Tom Haigh19 дек. 2008 г., 10:16
Я думаю, что echoVar должен принять $ var по ссылке, чтобы не показывать ошибку.

Вы можете запустить его соператор подавления ошибок @.

echo @$variable;

Однако лучше не игнорировать неустановленные переменные. Неустановленные переменные могут указывать на логическую ошибку в сценарии, и лучше убедиться, что все переменные установлены перед использованием.

 Tom Haigh18 дек. 2008 г., 15:17
оператор @ медленный
 Robert Swisher19 дек. 2008 г., 01:42
Полностью согласен с предположением, что это не лучшая практика.
 Matthew Scharley18 дек. 2008 г., 02:35
Единственное исключение, которое я обычно делаю из этого правила, это неустановленные индексы массива. Они могут возникать повсюду. Также лучше поместить его в саму переменную как переменную @ $, чтобы она подавляла только неустановленную ошибку.
 Eran Galperin18 дек. 2008 г., 02:39
Да, спасибо за это. Я почти никогда не использую этот оператор по причинам, которые я упомянул :)
 Eran Galperin18 дек. 2008 г., 19:36
Еще одна причина не использовать его
echo @$variable;

Ваш ответ на вопрос