Ответ 1
<?php
$foo = $bar = $ping = $pong = '';
?>
Если это ваш script и вы знаете, какие переменные вы используете, почему вы хотите тратить ресурсы, чтобы проверить, объявлена ли переменная forfor?
Я много лет программировал личные скрипты на 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 = '';
?>
Если это ваш script и вы знаете, какие переменные вы используете, почему вы хотите тратить ресурсы, чтобы проверить, объявлена ли переменная forfor?
Я разместил это в комментарии ранее, но кто-то предложил мне представить его в качестве ответа.
Самый короткий и простой способ, о котором я могу думать, это сделать:
$foo = $bar = $ping = $pong = '';
Я часто предпочитаю устанавливать значение false вместо пустой строки, так что вы всегда можете делать проверки в будущем с помощью === false, но это только предпочтение и зависит от того, как вы используете эти переменные и для чего.
Ваша попытка 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
, если переменная пуста.
Несколько круглый способ сделать это, если вы поместите имя своих переменных в массив, а затем зациклируете их с помощью 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;
}
Обратите внимание на измененный тернарный оператор.
Почему бы просто не установить их?
<?php
$foo = '';
$bar = '';
//etc
?>
Если вы пытаетесь сохранить значение в них, то да, что правильный путь вообще. Обратите внимание, что вам не нужна вторая пара скобок в ваших операторах:
if (!isset($foo)) $foo = '';
.
Чтобы исправить проблему
<?php
$foo = $bar = $ping = $pong = '';
?>
бросание
Примечание: переменная Undefined:...
<?php
@$foo = $bar = $ping = $pong = '';
?>
Он не будет исправлять его, но он не будет показан. nd не остановит сеанс script.
$a = ['foo', 'bar', 'ping', 'pong'];
foreach($a as $v) $$v = '';
//;)