什么是 PHP 简写:print var if var exists
Posted
技术标签:
【中文标题】什么是 PHP 简写:print var if var exists【英文标题】:What is the PHP shorthand for: print var if var exist 【发布时间】:2011-08-15 17:50:34 【问题描述】:我们以前都遇到过,需要在输入字段中打印一个变量,但不确定是否设置了 var,就像这样。基本上这是为了避免出现 e_warning。
<input value='<?php if(isset($var))print($var);; ?>'>
我怎样才能写得更短?我可以引入这样的新功能:
<input value='<?php printvar('myvar'); ?>'>
但我没有成功编写 printvar() 函数。
【问题讨论】:
echo (isset($var) ? $var : '')
尽可能短且语法正确。
没有为其创建函数我认为@Marc B 提供了最短的方法......在评论中不少!
【参考方案1】:
对于 PHP >= 5.x:
我的建议是创建一个issetor
函数:
function issetor(&$var, $default = false)
return isset($var) ? $var : $default;
这需要一个变量作为参数,如果存在则返回它,如果不存在则返回默认值。现在你可以这样做了:
echo issetor($myVar);
但也可以在其他情况下使用:
$user = issetor($_GET['user'], 'guest');
对于 PHP >= 7.0:
从 PHP 7 开始,您可以使用 null-coalesce operator:
$user = $_GET['user'] ?? 'guest';
或者在你的使用中:
<?= $myVar ?? '' ?>
【讨论】:
你为什么要通过引用来打电话?价值还不够吗?此外,default 是 PHP 中的关键字,最好不要将其用作函数名。它在我的服务器上出现了奇怪的结果。 @afuzzyllama:因为我需要传递一个可能未定义的变量。如果我遗漏了引用,它会给你一个未定义的变量通知;) @afuzzyllama:感谢您的指出,将其重命名为issetor
(我想他们是这样命名的,当时他们想在 PHP 6 中实现它,但我不太确定。)
这个方法的一个特点 - 将issetor
称为issetor($var['key'])
会将key
注入$var
。在某些情况下,您可能会遇到意外行为,尤其是在您稍后迭代键时。
不是这个的忠实粉丝。当你通过引用传递它时,PHP 应该抛出一个未定义的变量警告。【参考方案2】:
另一种选择:
<input value="<?php echo isset($var) ? $var : '' ?>">
【讨论】:
是的,但它也会发出 E_NOTICE。检查是否先设置可以解决此问题。 +1 和<input value="<?=isset($var) ? $var : '' ?>">
使这更短。【参考方案3】:
我能想到的最短答案是<?php isset($var) AND print($var); ?>
更多详情请联系here on php manual。
'; // 这是另一种选择 isset( $value ) 和 print( $value ); ?>if 语句的一个简单替代方法(几乎类似于三元运算符)是使用 AND。考虑以下几点:
由于某种原因,这不适用于 echo()。我觉得这非常有用!
【讨论】:
and
只是逻辑运算符&&
的别名,但没有人使用它。您的代码与isset($var) && print($var);
相同【参考方案4】:
<input value='<?php @print($var); ?>'>
【讨论】:
错误/警告/通知抑制很脏。 如果它抑制了一个实际的错误,那就太脏了。当一个更简单的解决方案就足够时,花时间或增加代码的复杂性真的值得吗?只要您知道自己在做什么,以及为什么警告被禁止,就可以了。 打印或回显变量时不能出错。如果变量不存在,则不会打印。如果有要打印的东西,php 会处理它。 arychj 是对的。【参考方案5】:最好使用合适的模板引擎 - https://***.com/q/3694801/298479 提到了两个不错的。
这就是你的函数 - 只有当 var 存在于全局范围内时它才会起作用:
function printvar($name)
if(isset($GLOBALS[$name])) echo $GLOBALS[$name];
【讨论】:
抱歉,正在寻找非全局变量的解决方案。 在这种情况下..获取模板引擎。【参考方案6】:您可以使用<?php echo @$var; ?>.
或<?= @$var ?>
。
【讨论】:
错误/警告/通知抑制很脏。 @demian / 小偷:如果是为了抑制函数的错误,我会同意,但坦率地说,在输出情况下抑制变量的“未定义”警告是允许的 @mella:在某些情况下,您对服务器没有那种级别的控制权,这就是通常的“ZOMG 永远不会使用短标签!它们太糟糕了!!!!!! "发出令人窒息的恐慌警告。 @Marc B:从逻辑上讲,我同意,但是,如果有人比你更年轻,读到代码并说“哦,可以使用抑制”,我保证你会发现它在其余部分中乱七八糟他们编写的代码 :) 我认为编写isset
或 empty
的开销比坏习惯要好得多 :)
@demian:这就像说我们不应该在厨房里准备晚餐的刀,因为它们可以用来在后巷刺人。适合工作的适当工具,在您无法禁用警告的情况下,抑制是最好的选择,除非您想使用重复的 echo (isset($var) ? $var : '')
构造来破坏您的代码。【参考方案7】:
目前在 PHP 中没有任何东西可以做到这一点,而且你也不能真正在 PHP 中编写一个函数来做到这一点。您可以执行以下操作来实现您的目标,但如果变量不存在,它也会产生定义变量的副作用:
function printvar(&$variable)
if (isset($variable))
echo $variable;
这将允许您执行printvar($foo)
或printvar($array['foo']['bar'])
。但是,IMO 最好的方法是每次都使用isset
。我知道这很烦人,但没有任何好的方法可以解决它。不推荐使用@
。
有关详细信息,请参阅https://wiki.php.net/rfc/ifsetor。
【讨论】:
不应该是if (isset($variable))
【参考方案8】:
这对我有用:
<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?>
【讨论】:
【参考方案9】:<input value='<?php printvar(&$myvar); ?>' />
function printvar(&$val)
if (isset($val)) echo $val;
【讨论】:
行不通。将 var 传递给函数会引起通知。不确定它是否适用于参考...可能值得一试。 @ThiefMaster:同时想到同样的事情 :-)【参考方案10】:您还可以使用以下内容:
<input type="text" value="<?php echo @$var; ?>">//means if(isset($var)) echo $var;
【讨论】:
这个答案之前已经给出了,请不要发布重复的答案,因为它只会分散注意力。【参考方案11】:$var;
(isset($var)) ? (print $var) : '';
$var = 'hello var';
(isset($var)) ? (print $var) : '';
【讨论】:
相当复杂...我的意思是有很多机会写语法错误。 我特别发现isset()
和print
周围的括号非常可爱。以上是关于什么是 PHP 简写:print var if var exists的主要内容,如果未能解决你的问题,请参考以下文章
PHP 重新格式化var_dump/print_r打印的数组