正确的方式来声明PHP中的多个variables

我已经在PHP中编写了多年的个人脚本,习惯closures错误显示。 我即将发布一些这些脚本,并希望以正确的方式进行操作。

我closures错误显示的唯一原因是为了避免在使用isset()之前testing每一个var。

所以,这是我的问题:

有没有比这更好的方法来宣布多个variables?

<?php // at the begining of my main file if (!isset($foo)) ($foo = ''); if (!isset($bar)) ($bar = ''); if (!isset($ping)) ($ping = ''); if (!isset($pong)) ($pong = ''); // etc. for every single var ?> 

比如这样的东西:

 <?php var $foo, $bar, $ping, $pong; ?> 
 <?php $foo = $bar = $ping = $pong = ''; ?> 

如果这是你的脚本,你知道你使用哪个variables,为什么你要花钱检查variables是否被声明?

我之前在一个评论中发布了这个,但是有人build议我把它作为答案提交。

我能想到的最简单的方法是:

 $foo = $bar = $ping = $pong = ''; 

我经常喜欢将事物设置为false,而不是空string,这样您可以随时使用=== false来进行检查,但这只是一种偏好,取决于您如何使用这些variables以及如何使用这些variables。

你的if()isset()尝试是这样做的正确方法!

但是使用三元运算符 ( Ternary Operator) ,你可以把它写得更简短一些:

 $foo = isset($foo) ? $foo : ''; 

第一个$foo将被设置为后面的值?=之后的条件为真时,否则将被设置为:之后的值。 条件( =?之间)始终以布尔值forms输出。

从PHP 5.3开始, 你可以写得更短

 $foo = isset($foo) ?: ''; 

这会将$foo设置$foo TRUEFALSE (取决于isset()返回的内容),正如@Decent Dabbler在注释中指出的那样。 删除isset()将其设置为''但它也会引发一个未定义的variables通知(不是在生产中)。

从PHP 7开始,您可以使用空的合并运算符:

 $foo = $foo ?? ''; 

这不会抛出任何错误,但是如果$foo存在并且是空的,它将评估为TRUE ,与速记三元运算符相反,如果variables为空,则评估为FALSE

如果你把你的variables的名字放在一个数组中,然后用一个三元运算符(Ternary Operator)来循环它们,这与powtac的答案类似。

 $vars = array('foo', 'bar', 'ping', 'pong'); $defaultVar = ''; foreach($vars as $var) { $$var = isset($$var) ? $$var : $defaultVar; } 

正如其他答案中提到的那样,从5.3版本开始,PHP允许你编写上面的代码,如下所示:

 $vars = array('foo', 'bar', 'ping', 'pong'); $defaultVar = ''; foreach($vars as $var) { $$var = isset($$var) ?: $defaultVar; } 

注意改变的三元操作符。

为什么不把它们设置?

 <?php $foo = ''; $bar = ''; //etc ?> 

如果你试图保留其中的价值,那么是的,这是一般的正确的方法。 请注意,您的语句中不需要第二对括号。

 if (!isset($foo)) $foo = ''; 

足够。

要解决的问题

  <?php $foo = $bar = $ping = $pong = ''; ?> 

投掷

注意:未定义的variables:…

  <?php @$foo = $bar = $ping = $pong = ''; ?> 

它不会修复它,但不会显示nd不会停止parsing脚本。

$ a = ['foo','bar','ping','pong']; foreach($ a as $ v)$$ v ='';

//;)