PHP的缩写是什么:如果存在var,则打印var

PHP的缩写是什么:如果存在var,则打印var,php,var,isset,Php,Var,Isset,我们以前都遇到过这种情况,需要在输入字段中打印一个变量,但不知道是否设置了var,就像这样。基本上,这是为了避免e_警告 <input value='<?php if(isset($var)){print($var);}; ?>'> ”> 但是我没有成功地编写printvar()函数。最好使用适当的模板引擎-提到了两个不错的模板引擎 这是您的函数-只有在全局范围内存在变量时,它才会工作: function printvar($name) { if(isset(

我们以前都遇到过这种情况,需要在输入字段中打印一个变量,但不知道是否设置了var,就像这样。基本上,这是为了避免e_警告

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

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

最好使用适当的模板引擎-提到了两个不错的模板引擎

这是您的函数-只有在全局范围内存在变量时,它才会工作:

function printvar($name) {
    if(isset($GLOBALS[$name])) echo $GLOBALS[$name];
}
您可以执行

另一个选项:

<input value="<?php echo isset($var) ? $var : '' ?>">

目前,PHP中没有任何东西可以做到这一点,而且您也无法用PHP编写函数来实现这一点。为了实现目标,您可以执行以下操作,但如果变量不存在,它也会产生定义变量的副作用:

function printvar(&$variable)
{
    if (isset($variable)) {
        echo $variable;
    }
}
这将允许您执行
printvar($foo)
printvar($array['foo']['bar'])
。但是,在IMO中,最好的方法是每次都使用
isset
。我知道这很烦人,但没有什么好办法。不建议使用
@

有关更多信息,请参阅.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开始,您可以使用:

或在您的使用中:

<?= $myVar ?? '' ?>


我能想到的最短答案是

有关详情,请参阅

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

'; //这是另一种选择 isset($value)和print($value); ?> 由于某些原因,这不适用于echo()。我觉得这非常有用

这对我很有用:

<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?>

您还可以使用以下功能:

<input type="text" value="<?php echo @$var; ?>">//means if(isset($var)){ echo $var; }


Error/warning/notice suppression相当脏。如果它正在抑制一个实际的错误,那么它就是脏的。当一个更简单的解决方案足够时,花时间或增加代码的复杂性真的值得吗?只要您知道自己在做什么,以及为什么要取消警告,这就可以了。打印或回显变量时不会出现错误。如果变量不存在,它将不会打印。如果有东西要打印,php会处理的。arychj是对的。Error/warning/notice suppression是相当肮脏的。@demian/thift:我同意如果它是为了抑制函数的错误,但是坦率地说,在输出情况下抑制变量上的“not defined”警告是错误的allowable@mella:在某些情况下,您没有对服务器的那种级别的控制,这是通常“ZOMG永远不要使用Shorttags!他们很坏!!!!!“毫无喘息的恐慌警告来自。@马克B:从逻辑上说,我同意,但是,如果有一个比你小的人读了代码并说“哦,可以使用抑制。”",我保证你会发现在他们写的代码的其余部分都是乱七八糟的:)我认为在
isset
empty
中写的开销比坏习惯要好得多:)@demian:这就像说我们不应该在厨房准备晚餐时放刀子,因为刀子可以用来刺伤后巷的人。为适当的作业使用适当的工具,并且在您无法禁用警告的情况下,最好选择抑制,除非您想用重复的
echo(isset($var)?$var:“”)
构造将代码粘在一起。相当复杂。。。我的意思是有很多机会写语法错误。我特别发现
isset()
print
周围的括号非常可爱。抱歉,正在寻找非全局变量的解决方案。在这种情况下。。获取一个模板引擎。无法工作。将var传递给函数将引起通知。不确定它是否与引用一起工作。。。可能值得一试。@ThiefMaster:同时想到了同样的事情:-)
echo(isset($var)?$var:“”)
是你能得到的最短的,并且语法上是正确的。没有为它创建函数,我想@Marc B已经提供了最短的实现方法。。。在一个评论中也一样!是的,但它也会发布一份E_通知。首先检查是否设置了它可以解决这个问题。+1和
为什么要通过引用进行调用?价值还不够吗?另外,默认值是PHP中的一个关键字,最好不要将其用作函数名。它在我的服务器上有奇怪的结果。@afuzzyllama:因为我需要传递一个可能未定义的变量。如果我遗漏了引用,它会给您一个未定义的变量通知;)@afuzzyllama:感谢您指出,将它重命名为
issetor
(我想这就是他们命名它的方式,当时他们想在PHP6中实现它,但我不太确定。)关于这个方法的一点——将
issetor
调用为
issetor($var['key'])
key
注入
$var
。在某些情况下,您可能会出现意外的行为,特别是当您稍后对键进行迭代时。当您通过引用传递它时,PHP应该抛出一个未定义的变量警告。这不应该是
if(isset($variable)){
此答案已在前面给出,请避免发布双重答案,因为这只会增加注意力。
只是逻辑运算符的别名
&&
,但没有人使用它。您的代码与
isset($var)&&print($var);
$user = issetor($_GET['user'], 'guest');
$user = $_GET['user'] ?? 'guest';
<?= $myVar ?? '' ?>
<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?>
<input type="text" value="<?php echo @$var; ?>">//means if(isset($var)){ echo $var; }