【问题标题】:What is the PHP shorthand for: print var if var existPHP 的简写是什么:print var if var exists
【发布时间】:2011-04-29 19:28:34
【问题描述】:

我们以前都遇到过,需要在输入字段中打印一个变量,但不确定是否设置了 var,就像这样。基本上这是为了避免出现 e_warning。

<input value='<?php if(isset($var)){print($var);}; ?>'>

我怎样才能写得更短?我可以引入这样的新功能:

<input value='<?php printvar('myvar'); ?>'>

但我没有成功编写 printvar() 函数。

【问题讨论】:

  • echo (isset($var) ? $var : '') 尽可能短且语法正确。
  • 没有为它创建函数我认为@Marc B 提供了最短的方法......在评论中不少!

标签: php var isset


【解决方案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://stackoverflow.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 周围的括号非常可爱。
    猜你喜欢
    • 2011-08-15
    • 2014-02-06
    • 1970-01-01
    • 2014-11-05
    • 2014-01-15
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多