Подтвердить что ты не робот

Правильный способ объявления нескольких 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;
?>
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

$foo = $foo ?? '';

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

Ответ 4

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

$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;
}

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

Ответ 5

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

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

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

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

.

Ответ 6

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

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

бросание

Примечание: переменная Undefined:...

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

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

Ответ 7

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

//;)