使用大括号在 PHP 中构建代码

2022-08-30 18:18:30

是否可以将PHP中的代码片段括在括号内(而不将片段用作函数)?

以下代码的行为方式是否与没有大括号的方式相同?或者可能存在任何问题,具体取决于括号内或括号外使用的代码类型?

例如,这将:

<?php

// First Code-Block
{# several lines of code
}

// Second Code-Block
{# another several lines of code
}

?>

始终以相同的方式行事:

<?php

// First Code-Block
# several lines of code

// Second Code-Block
# another several lines of code

?>

更新:正如“My1”的评论中所述,其中一个目标是构建大型代码段。特别是因为大多数IDE都为您提供了折叠括号之间线条的选项。

特别是考虑到“龙梦家”的“卢克·米尔斯”的答案,我玩了一下,到目前为止我没有遇到任何副作用。当然,这可能会随着将来新的PHP版本而改变,但是“Luke Mills”的答案为关注什么提供了很好的指示。


答案 1

是的,但它不会创建新的本地作用域。这不是通常可以做的事情。通常人们会用注释标记这样的块。

更新:

花了一些挖掘才能在手册中找到对它的引用,但这里是:

http://www.php.net/manual/en/control-structures.intro.php

任何 PHP 脚本都是由一系列语句构建而成的。语句可以是赋值、函数调用、循环、条件语句,甚至是不执行任何操作的语句(空语句)。语句通常以分号结尾。此外,可以通过用大括号封装一组语句来将语句分组到语句组中。语句组本身也是一个语句。本章介绍了各种语句类型。

这里的关键是,可以通过用大括号封装一组语句,将语句分组到一个语句组中

我还查看了对变量范围的引用,因为它与这种情况有关,但手册没有特别提到它,但是您可以这样想:

在 PHP 中,函数和类创建变量作用域。你可以在这里读到。但是语句组(如上所述)则不然。不要像函数(或类)包裹括号那样考虑语句组的大括号,而要将它们想象成包裹控制结构(,,等)的语句组的大括号 - 因为这正是它们的本质。很明显,如果您使用的是大括号不会引入新作用域的语句(或任何其他控件结构),则它们只是语句块的包装器。ifforwhileswitchif


答案 2

如果将 PHP 代码行为括在大括号内,则不会更改。但是,您不能在大括号内使用某些 PHP 语句:

  • namespace声明;
  • 命名空间声明为别名或导入任何名称;use
  • 全球宣言;const
  • __halt_compiler().

这意味着,以下脚本将起作用:

<?php
const x = 5;
echo x;

但以下内容将无法编译:

<?php
{
  const x = 5;
  echo x;
}

推荐