什么是 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 和 &lt;input value="&lt;?=isset($var) ? $var : '' ?&gt;"&gt; 使这更短。【参考方案3】:

我能想到的最短答案是&lt;?php isset($var) AND print($var); ?&gt;

更多详情请联系here on php manual。

if 语句的一个简单替代方法(几乎类似于三元运算符)是使用 AND。考虑以下几点:

'; // 这是另一种选择 isset( $value ) 和 print( $value ); ?>

由于某种原因,这不适用于 echo()。我觉得这非常有用!

【讨论】:

and 只是逻辑运算符&amp;&amp; 的别名,但没有人使用它。您的代码与isset($var) &amp;&amp; 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】:

您可以使用&lt;?php echo @$var; ?&gt;.&lt;?= @$var ?&gt;

【讨论】:

错误/警告/通知抑制很脏。 @demian / 小偷:如果是为了抑制函数的错误,我会同意,但坦率地说,在输出情况下抑制变量的“未定义”警告是允许的 @mella:在某些情况下,您对服务器没有那种级别的控制权,这就是通常的“ZOMG 永远不会使用短标签!它们太糟糕了!!!!!! "发出令人窒息的恐慌警告。 @Marc B:从逻辑上讲,我同意,但是,如果有人比你更年轻,读到代码并说“哦,可以使用抑制”,我保证你会发现它在其余部分中乱七八糟他们编写的代码 :) 我认为编写 issetempty 的开销比坏习惯要好得多 :) @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打印的数组

函数式编程(三元运算文件操作)

PHP速记概述

PHP IF判断简写

php中如何看一条函数式。如if(isset(........)我就知道if是如果的意思

简写if / else php不能继续