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

Tom*_*yek 52 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
?>
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?

  • 另外,如果你只是出于某种原因想要"声明"它们,你可以用`;`将它们全部放在一行上,就像`$ foo; $酒吧; $远; $ boo;`,全部在一条线上.注意没有初学者,`$ foo,$ bar,$ far,$ boo;`抛出(解析)语法错误,杀死脚本. (12认同)
  • 在声明变量之后,你可以单独更改它们,并且每个变量都保持自己的值. (2认同)

poc*_*ese 11

我之前在评论中发布了此帖,但有人建议我将其作为答案提交.

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

$foo = $bar = $ping = $pong = '';
Run Code Online (Sandbox Code Playgroud)

我经常喜欢将事物设置为false而不是空字符串,以便您可以在将来使用=== false进行检查,但这只是一个偏好,取决于您如何使用这些变量以及用于什么.


pow*_*tac 8

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)

这将设置$fooTRUEFALSE(取决于isset()返回值),如@Decent Dabbler在评论中所指出的那样.删除isset()会将其设置为''但它也会抛出一个未定义的变量通知(尽管不在生产中).

从PHP 7开始,您可以使用null coalesce运算符:

$foo = $foo ?? '';
Run Code Online (Sandbox Code Playgroud)

这不会抛出任何错误,但它将评估好像TRUE是否$foo存在并且为空,而不是速记三元运算符,它将评估FALSE变量为空.

  • `$ foo = isset($ foo)?:'';`不会做你认为它会做的事情.如果设置了`$ foo`,无论`$ foo`的初始值如何,它都会将`true`分配给`$ foo`. (6认同)

Con*_*ers 5

如果你把变量的名字放在一个数组中,然后用一个三元运算符循环它们,就像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)

请注意更改的三元运算符.