我已经用PHP编写了多年的个人脚本编码,并习惯于关闭错误显示.我即将发布其中一些脚本,并希望以正确的方式完成.
我关闭错误显示的唯一原因是为了避免在使用它之前测试每个var,这要归功于isset().
所以,这是我的问题:
是否有更好的方式来声明多个变量而不是这个?
<?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
?>
Run Code Online (Sandbox Code Playgroud)
比如这样的东西:
<?php
var $foo, $bar, $ping, $pong;
?>
Run Code Online (Sandbox Code Playgroud)
Dan*_*oul 83
<?php
$foo = $bar = $ping = $pong = '';
?>
Run Code Online (Sandbox Code Playgroud)
如果它是您的脚本并且您知道您使用哪些变量,为什么要花费资源来检查变量是否被声明为befor?
poc*_*ese 11
我之前在评论中发布了此帖,但有人建议我将其作为答案提交.
我能想到的最简单,最简单的方法是:
$foo = $bar = $ping = $pong = '';
Run Code Online (Sandbox Code Playgroud)
我经常喜欢将事物设置为false而不是空字符串,以便您可以在将来使用=== false进行检查,但这只是一个偏好,取决于您如何使用这些变量以及用于什么.
你if()的isset()尝试是正确的方法!
但您可以使用三元运算符将其写得更短/更易读:
$foo = isset($foo) ? $foo : '';
Run Code Online (Sandbox Code Playgroud)
第一个$foo将被设置为后面的?条件=为真后的值,否则它将被设置为之后的值:.条件(在=和之间?)将始终作为布尔值进行转换.
从PHP 5.3开始,你可以写得更短:
$foo = isset($foo) ?: '';
Run Code Online (Sandbox Code Playgroud)
这将设置$foo为TRUE或FALSE(取决于isset()返回值),如@Decent Dabbler在评论中所指出的那样.删除isset()会将其设置为''但它也会抛出一个未定义的变量通知(尽管不在生产中).
从PHP 7开始,您可以使用null coalesce运算符:
$foo = $foo ?? '';
Run Code Online (Sandbox Code Playgroud)
这不会抛出任何错误,但它将评估好像TRUE是否$foo存在并且为空,而不是速记三元运算符,它将评估FALSE变量为空.
如果你把变量的名字放在一个数组中,然后用一个三元运算符循环它们,就像powtac回答一样,这有点过于圆满.
$vars = array('foo', 'bar', 'ping', 'pong');
$defaultVar = '';
foreach($vars as $var)
{
$$var = isset($$var) ? $$var : $defaultVar;
}
Run Code Online (Sandbox Code Playgroud)
正如其他答案中所提到的,从版本5.3开始,PHP允许您编写上面的代码,如下所示:
$vars = array('foo', 'bar', 'ping', 'pong');
$defaultVar = '';
foreach($vars as $var)
{
$$var = isset($$var) ?: $defaultVar;
}
Run Code Online (Sandbox Code Playgroud)
请注意更改的三元运算符.