正确的方式来声明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
TRUE
或FALSE
(取决于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 ='';
//;)