Мы все столкнулись с этим раньше, нужно распечатать переменную в поле ввода, но не зная наверняка, установлен ли параметр var. В основном это делается для предотвращения e_warning.
<input value='<?php if(isset($var)){print($var);}; ?>'>
Как я могу написать это короче? Я в порядке, представляя новую функцию:
<input value='<?php printvar('myvar'); ?>'>
Но мне не удается написать функцию printvar ().
Моя рекомендация заключалась бы в создании функции issetor
:
function issetor(&$var, $default = false) { return isset($var) ? $var : $default; }
Это принимает переменную как аргумент и возвращает ее, если она существует, или значение по умолчанию, если это не так. Теперь вы можете сделать:
echo issetor($myVar);
Но также используйте его в других случаях:
$user = issetor($_GET['user'], 'guest');
Начиная с PHP 7 вы можете использовать оператор null-coalesce :
$user = $_GET['user'] ?? 'guest';
Или в вашем использовании:
<?= $myVar ?? '' ?>
Другой вариант:
<input value="<?php echo isset($var) ? $var : '' ?>">
<input value='<?php @print($var); ?>'>
Самый короткий ответ, который я могу придумать, это <?php isset($var) AND print($var); ?>
<?php isset($var) AND print($var); ?>
Более подробная информация приведена в руководстве по php .
Простой альтернативой оператору if, который почти как тернарный оператор, является использование AND. Рассмотрим следующее:
«; // Это альтернатива isset ($ value) AND print ($ value); ?>
По какой-то причине это не работает с echo (). Я считаю это чрезвычайно полезным!
Лучше использовать правильный механизм шаблонов – https://stackoverflow.com/q/3694801/298479 упоминает два хороших.
Вот ваша функция в любом случае – она будет работать только в том случае, если var существует в глобальной области:
function printvar($name) { if(isset($GLOBALS[$name])) echo $GLOBALS[$name]; }
Вы можете сделать <?php echo @$var; ?>.
<?php echo @$var; ?>.
Или <?= @$var ?>
.
В настоящее время в PHP нет ничего, что могло бы сделать это, и вы не можете написать функцию в PHP для этого. Вы можете сделать следующее для достижения своей цели, но также имеет побочный эффект определения переменной, если она не существует:
function printvar(&$variable) { if (isset($variable)) { echo $variable; } }
Это позволит вам делать printvar($foo)
или printvar($array['foo']['bar'])
. Однако лучший способ сделать это IMO – использовать isset
каждый раз. Я знаю, что это раздражает, но вокруг нет никаких хороших путей. Использование @
не рекомендуется.
Для получения дополнительной информации см. https://wiki.php.net/rfc/ifsetor .
Это сработало для меня:
<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?>
<input value='<?php printvar(&$myvar); ?>' /> function printvar(&$val) { if (isset($val)) echo $val; }
$var; (isset($var)) ? (print $var) : ''; $var = 'hello var'; (isset($var)) ? (print $var) : '';