Правильный способ объявления нескольких vars в PHP

Я много лет программировал личные скрипты в PHP и привык отключать отображение ошибок. Я собираюсь выпустить некоторые из этих сценариев и хотел бы сделать это правильно.

Единственная причина, по которой я выключаю отображение ошибок, – это не проверять каждый отдельный var, прежде чем использовать его, благодаря isset ().

Вот мой вопрос:

Есть ли лучший способ объявить несколько vars, чем это?

<?php // at the begining of my main file if (!isset($foo)) ($foo = ''); if (!isset($bar)) ($bar = ''); if (!isset($ping)) ($ping = ''); if (!isset($pong)) ($pong = ''); // etc. for every single var ?> 

Что-то вроде этого, например:

 <?php var $foo, $bar, $ping, $pong; ?> 

 <?php $foo = $bar = $ping = $pong = ''; ?> 

Если это ваш скрипт, и вы знаете, какие переменные вы используете, зачем вы тратите ресурсы, чтобы проверить, была ли указана переменная?

Я опубликовал это в комментарии ранее, но кто-то предложил мне представить его в качестве ответа.

Самый короткий и простой способ, о котором я могу думать, – это сделать:

 $foo = $bar = $ping = $pong = ''; 

Я часто предпочитаю присваивать вещи false, а не пустую строку, так что вы всегда можете делать проверки в будущем с === false, но это только предпочтение и зависит от того, как вы используете эти переменные и для чего.

Ваша попытка if() с isset() – это правильный способ сделать это!

Но вы можете написать его немного короче / читабельнее, используя Тернарный оператор :

 $foo = isset($foo) ? $foo : ''; 

Первый $foo будет установлен в значение после ? когда условие после = истинно, иначе оно будет установлено в значение после : Условие (между = и ? ) Всегда будет выбрано как boolean.

Начиная с PHP 5.3 вы можете записать его еще короче :

 $foo = isset($foo) ?: ''; 

Это установит $foo в TRUE или FALSE (в зависимости от того, что возвращает isset() ), как указано в комментариях @Decent Dabbler. Удаление isset() установит его в '' но оно также выдаст неопределенное уведомление переменной (но не в производстве).

Начиная с PHP 7 вы можете использовать оператор null coalesce:

 $foo = $foo ?? ''; 

Это не вызовет никакой ошибки, но будет оцениваться как TRUE если $foo существует и пуст, в отличие от сокращенного тернарного оператора, который будет оцениваться как FALSE если переменная пуста.

Несколько круглый способ сделать это, если вы поместите имя своих переменных в массив, а затем powtac их с помощью Ternary Operator, аналогично powtac .

 $vars = array('foo', 'bar', 'ping', 'pong'); $defaultVar = ''; foreach($vars as $var) { $$var = isset($$var) ? $$var : $defaultVar; } 

Как упоминалось в других ответах, начиная с версии 5.3, PHP позволяет вам написать приведенный выше код следующим образом:

 $vars = array('foo', 'bar', 'ping', 'pong'); $defaultVar = ''; foreach($vars as $var) { $$var = isset($$var) ?: $defaultVar; } 

Обратите внимание на измененный тернарный оператор.

Почему бы просто не установить их?

 <?php $foo = ''; $bar = ''; //etc ?> 

Если вы пытаетесь сохранить значение в них, то да, это правильный способ в целом. Обратите внимание, что вам не нужна вторая пара скобок в ваших операторах:

 if (!isset($foo)) $foo = ''; 

достаточно.

Чтобы исправить проблему

  <?php $foo = $bar = $ping = $pong = ''; ?> 

бросание

Примечание. Неопределенная переменная: …

  <?php @$foo = $bar = $ping = $pong = ''; ?> 

Он не будет исправлять это, но он не будет показан. Nd не остановит скрипт от разбора.

$ a = ['foo', 'bar', 'ping', 'pong']; foreach ($ a as $ v) $$ v = '';

//;)