PHP缩短,如果定义了变量则输出变量

3
有没有办法缩短这段代码?
<?= isset($email)?$email:''; ?>

我认为重复$email有点傻。我已经尝试过了。
<?= isset($email)?:''; ?>

但它回显的是来自isset的布尔值。


2
这可能是可怕的实践,但您可以使用 @$email 来表示“这可能未设置,但我不在乎”。 - Steve Howard
我不认为有,但很想听听不同的意见。 - Gavin
1
是的,它可以是解决方案 <?=@$mail;?>。 - Dalım Çepiç
为什么这会是“不良实践”? - Gavin
1
通常认为使用 @ 符号来抑制提示/警告是不好的编程实践。 - Pitchinnate
显示剩余2条评论
3个回答

2
<?= isset($email)?$email:''; ?> // is the shortest way to do it.

如果关闭了短标签,那么你必须使用 <?php echo isset($email)?$email:'' ?> 这个版本的代码才能始终正常工作。 - Ian Lewis

1
您可以编写自定义函数:
function safeEcho(&$var) {
    if (isset($var))
        return $var;

    return null;
}

并调用这个函数:
<?= safeEcho($var) ?>

2
这里有两个错误:1)一个返回值的函数不应该被称为 safeEcho。2)这并不像你想象的那么“安全”——如果 $email 没有设置,它将会发出 E_NOTICE - Yang
根据@Dave的建议,将编辑(变量传递引用) - TheWolf
@DaveJust 你说得没错,一开始我写这个函数的时候有一个错误的概念。当然,还有更好的命名方式。 - TheWolf
@TheWolf 你使用的是哪个版本的PHP?自从5.3.0版本以后,所有变量都是按引用传递的,并且使用&已经被弃用。从5.4.0版本开始已经移除。http://www.php.net//manual/en/language.references.pass.php - Ian Lewis

1
唯一的“缩短”方式是使用自定义函数。
function get(&$email) { // <- Note, there must be a reference!!!
  return isset($email) ? $email : '';
} 

<?= get($email); ?>

如果您没有使用引用传递$email,那么如果一个变量未设置,isset()将会发出E_NOTICE警告。这是因为您向isset()传递的是未定义变量的副本,而不是变量本身。

这取决于你所说的 PHP 版本,从某个版本开始,所有东西都是通过引用传递的。 - Mehdi Karamosly
@MehdiKaramosly 需要引用来源。 - Yang
注意:函数调用时没有引用符号 - 只有在函数定义时才有。仅使用函数定义就足以正确地按引用传递参数。从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一个警告,指出“调用时按引用传递”已被弃用。从 PHP 5.4.0 开始,调用时按引用传递已被删除,因此使用它将引发致命错误。 - Mehdi Karamosly
2
这正是发生在这里的情况:函数定义上有引用符号,函数调用上没有引用符号。 - TheWolf
除非你使用的是 PHP < 5.3.0 版本,否则根本不需要使用引用符号,此时你需要升级。 - Ian Lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接