在PHP中声明多个变量的正确方法

时间:2012-06-14 00:29:27

标签: php variables

我在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;
?>

8 个答案:

答案 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设置为FALSEisset()(取决于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 ='';

//;)