我在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
?>
例如:
<?php
var $foo, $bar, $ping, $pong;
?>
答案 0 :(得分:80)
<?php
$foo = $bar = $ping = $pong = '';
?>
如果是您的脚本并且您知道您使用哪些变量,为什么要花费资源来检查变量是否被声明为befor?
答案 1 :(得分:11)
我之前在评论中发布了此消息,但有人建议我将其作为答案提交。
我能想到的最短最简单的方法是:
$foo = $bar = $ping = $pong = '';
我经常喜欢将事物设置为false而不是空字符串,以便您以后可以使用=== false进行检查,但这只是一个偏好,取决于您如何使用这些变量和为了什么。
答案 2 :(得分:8)
if()
isset()
$foo = isset($foo) ? $foo : '';
尝试是正确的方法!
但是你可以使用Ternary Operator:
将它写得更短/更易读$foo
当?
之后的条件为真时,第一个=
将设置为:
之后的值,否则将设置为=
之后的值}。条件(?
和$foo = isset($foo) ?: '';
之间)将始终作为布尔值进行转换。
从PHP 5.3 开始,你可以写得更短:
$foo
这会将TRUE
设置为FALSE
或isset()
(取决于isset()
返回的内容),正如@Decent Dabbler在评论中所指出的那样。删除''
会将其设置为$foo = $foo ?? '';
,但它也会抛出一个未定义的变量通知(尽管不在生产中)。
从PHP 7开始,您可以使用null coalesce运算符:
TRUE
这不会引发任何错误,但如果$foo
存在并且为空,它将评估为FALSE
,而不是速记三元运算符,如果{{1}},则评估为{{1}}变量是空的。
答案 3 :(得分:5)
如果你将变量的名称放在一个数组中,然后使用三元运算符循环它们,这类似于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;
}
注意更改后的三元运算符。
答案 4 :(得分:1)
在OOP中,您可以使用以下方法:
protected $password, $full_name, $email;
对于非OOP,您只需在代码中声明它们即可,如果您未为其分配任何值,则它们将是未定义的:
$foo; $bar; $baz;
$set_foo = (isset($foo)) ? $foo : $foo = 'Foo';
echo $set_foo;
答案 5 :(得分:0)
为什么不设置它们?
<?php
$foo = '';
$bar = '';
//etc
?>
如果你想保留它们中的值,那么这是正确的方法。请注意,您的语句中不需要第二对括号:
if (!isset($foo)) $foo = '';
就够了。
答案 6 :(得分:0)
解决
的问题 <?php
$foo = $bar = $ping = $pong = '';
?>
投掷
注意:未定义的变量:...
<?php
@$foo = $bar = $ping = $pong = '';
?>
它不会修复它但它不会显示nd不会阻止脚本解析。
答案 7 :(得分:-3)
$ a = ['foo','bar','ping','pong']; foreach($ a as $ v)$$ v ='';
//;)