Я много лет программировал личные скрипты в 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 = '';
//;)