Alb*_*bin 19 php curly-brackets
是否可以将代码片段包含在括号内的PHP中(不使用片段作为函数)?
以下代码的行为是否与没有大括号的行为相同?或者可能会出现问题,具体取决于括号内部或外部使用的代码类型?
例如,这将是:
<?php
// First Code-Block
{# several lines of code
}
// Second Code-Block
{# another several lines of code
}
?>
Run Code Online (Sandbox Code Playgroud)
始终表现得与此相同:
<?php
// First Code-Block
# several lines of code
// Second Code-Block
# another several lines of code
?>
Run Code Online (Sandbox Code Playgroud)
Luk*_*lls 29
是的,但它不会创建新的本地范围.这不是通常会做的事情.通常人们会用注释标记这样的块.
更新:
在手册中花了一些时间来寻找它的引用,但这里是:
http://www.php.net/manual/en/control-structures.intro.php
任何PHP脚本都是由一系列语句构建的.语句可以是赋值,函数调用,循环,条件语句,甚至是不执行任何操作的语句(空语句).声明通常以分号结尾.此外,通过使用花括号封装一组语句,可以将语句分组到语句组中.声明组本身也是一种声明.本章介绍了各种语句类型.
这里的关键是通过使用花括号封装一组语句,可以将语句分组为语句组.
我还看了一个关于变量范围的引用,因为它与这种情况有关,但是手册没有特别提到它,但你可以这样想:
在PHP中,函数和类创建一个变量范围.你可以在这里阅读.但声明组(如上所述)却没有.不要以为一个语句组的功能等(或类)包裹支架的花括号,但认为他们喜欢的花括号是包裹语句组控制结构(if,for,while,switch,等) -因这正是它们的本质.很明显,如果你使用一个if语句(或任何其他控制结构),大括号不会引入新的作用域,它们只是一个语句块的包装器.
如果将其括在大括号内,PHP代码行为不会改变.但是,您不能在大括号内使用一些PHP语句:
namespace 声明;use声明别名或导入任何名称;const宣言;__halt_compiler().这意味着,以下脚本将起作用:
<?php
const x = 5;
echo x;
Run Code Online (Sandbox Code Playgroud)
但以下内容不会编译:
<?php
{
const x = 5;
echo x;
}
Run Code Online (Sandbox Code Playgroud)
在我正在进行的一个项目中,我使用语句组来表示结构——在我的例子中,节点之间的父/子关系在路由器中创建:
$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');
}
}
Run Code Online (Sandbox Code Playgroud)
``
在内部,这构建了一个层次结构,如:
/admin
/upload
/menu
/load
/save
Run Code Online (Sandbox Code Playgroud)
route()在这个例子中调用创建了一个孩子——所以代码创建了一个具有树结构的模型(在路由器内部),但代码的结构没有反映这一点。
我在这里使用大括号使代码更清晰,因为阅读没有大括号和缩进的代码会非常困难:
/admin
/upload
/menu
/load
/save
Run Code Online (Sandbox Code Playgroud)
我认为,这种情况下的缩进确实阐明了正在发生的事情。