首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用大括号在PHP中构建代码结构

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

Stack Overflow用户
提问于 2013-02-20 10:04:46
回答 4查看 5.5K关注 0票数 23

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

下面的代码是否与没有大括号时的行为方式相同?或者,根据括号内或括号外使用的代码类型,是否会出现任何问题?

例如,这是否会:

代码语言:javascript
复制
<?php

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

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

?>

始终以相同的方式执行以下操作:

代码语言:javascript
复制
<?php

// First Code-Block
# several lines of code

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

?>

更新:的目标之一,也是在“My1”的评论中所说的,是构造大的代码段,特别是因为大多数IDE都允许你选择折叠括号之间的行。

特别是考虑到“dragondreamer”的"Luke Mills“的答案,我对它进行了一些尝试,到目前为止,我还没有遇到任何副作用。当然,这可能会在未来的新PHP版本中发生变化,但"Luke Mills”的答案给出了值得关注的很好的指针。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-24 21:57:46

如果将PHP代码放在大括号中,它的行为不会改变。但是,您不能在花括号中使用某些PHP语句:

用于为任何名称添加别名或导入任何名称的

  • namespace declarations;
  • namespace use声明;
  • 全局const any

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

代码语言:javascript
复制
<?php
const x = 5;
echo x;

但以下代码将无法编译:

代码语言:javascript
复制
<?php
{
  const x = 5;
  echo x;
}
票数 10
EN

Stack Overflow用户

发布于 2013-02-20 10:08:32

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

更新:

我花了一点功夫才在手册中找到了它的参考,但这里是:

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

任何

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

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

我还查找了与这种情况相关的variable scope的参考资料,但手册中并没有特别提到它,但是您可以这样认为:

在PHP中,函数和类创建一个变量作用域。您可以阅读有关该here的内容。但是语句组(如上所述)不需要。不要把语句组的花括号看作是函数(或类)的括号,而是把它们看作是用来包装语句的花括号(一组控制结构(ifforwhileswitch等)),因为它们就是它们。很明显,如果您使用的是if语句(或任何其他控制结构),那么大括号不会引入新的作用域,它们只是语句块的包装器。

票数 33
EN

Stack Overflow用户

发布于 2015-07-22 16:29:57

在我正在做的一个项目中,我使用语句组来表示结构-在我的例子中,节点之间的父/子关系在路由器中创建:

代码语言:javascript
复制
$router = new Router();

$admin = $router->route('admin');
{
    $upload = $admin->route('upload')->post('upload');

    $menu = $admin->route('menu');
    {
        $menu->route('load')->get('load');
        $menu->route('save')->get('save');
    }
}
代码语言:javascript
复制
Internally, this builds a hierarchical structure like:

```javascript

/admin

/upload

/menu

代码语言:javascript
复制
/load
代码语言:javascript
复制
/save
代码语言:javascript
复制
Calling `route()` in this example creates a child - so the code creates a model (inside the router) which has a tree structure, but the structure of the code does not reflect that.

I'm using curly braces here to make the code more legible, since reading the code without curly braces and indentation would be quite difficult:

```javascript

$router =新路由器();

$admin = $router->route('admin');

$upload = $admin->route('upload')->post('upload');

$menu =$admin->路由(‘menu’);

$menu->route('load')->get('load');

$menu->route(‘保存’)->get(‘保存’);

代码语言:javascript
复制

我认为,这种情况下的缩进确实清楚地说明了发生了什么。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14971123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档