在PHP中使用花括号来构造代码
是否可以将PHP中的代码片段括在括号内(不使用片段作为函数) 以下代码的行为是否与没有花括号时的行为相同?或者,根据括号内或括号外使用的代码类型,是否会出现任何问题 例如,这是否会:在PHP中使用花括号来构造代码,php,curly-brackets,Php,Curly Brackets,是否可以将PHP中的代码片段括在括号内(不使用片段作为函数) 以下代码的行为是否与没有花括号时的行为相同?或者,根据括号内或括号外使用的代码类型,是否会出现任何问题 例如,这是否会: <?php // First Code-Block {# several lines of code } // Second Code-Block {# another several lines of code } ?> 始终按照以下方式操作: <?php // First Cod
<?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
?>
是,但它不会创建新的本地作用域。这不是通常会做的事情。通常人们用注释来标记这样的块 更新: 在手册中找到它的参考文献需要一些挖掘,但这里是: 任何PHP脚本都是由一系列语句构成的。语句可以是赋值、函数调用、循环、条件语句,甚至是不执行任何操作的语句(空语句)。语句通常以分号结尾。此外,通过用大括号封装一组语句,可以将语句分组到一个语句组中。语句组本身也是一个语句。本章介绍了各种语句类型 这里的关键是语句可以通过用大括号封装一组语句来分组到一个语句组中 我还查看了与此情况相关的参考资料,但手册中没有具体提及,但您可以这样想:
在PHP中,函数和类创建变量作用域。你可以读一下。但是一个语句组(如上所述)没有。不要把语句组的花括号想象成函数(或类)的包装括号,而是把它们想象成控制结构的语句组的包装括号(
if
,for
,while
,switch
,等等),因为它们就是这样的。很明显,如果您使用的是if
语句(或任何其他控制结构),大括号不会引入新的作用域,它们只是语句块的包装器。我也这样做,完全是因为我的文本编辑器(Komodo Edit 8.5)。这不是一个“糟糕的理由”或“糟糕的编码”,如果它对你有帮助并且不会引起任何问题,如果没有其他简单的方法来做的话
我通过解决以下问题:
if(1 == 1){ //always executing if function
//whatever you want to add
}
#
在末尾添加一个#可以防止我的编辑器折叠花括号下面的所有空行。这有助于进一步构造代码。在我正在处理的一个项目中,我使用语句组来表示结构-在我的例子中,节点之间的父/子关系在路由器中创建:
$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');
}
}
```
在内部,这构建了一个层次结构,如:
/admin
/upload
/menu
/load
/save
在本例中,调用route()
会创建一个子级,因此代码会创建一个具有树结构的模型(在路由器内部),但代码的结构并不反映这一点
我在这里使用大括号是为了让代码更清晰,因为阅读没有大括号和缩进的代码会非常困难:
$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');
我认为,本例中的缩进确实澄清了正在发生的事情。如果将PHP代码行为括在花括号内,则不会改变。但是,不能在花括号内使用某些PHP语句:
声明李>名称空间
- 命名空间
声明来别名或导入任何名称李>使用
- 全局
声明李>const
\uuuu暂停编译器()
<?php
const x = 5;
echo x;
你的意思是,没有类似的if(true){…}
?出于什么目的?我真的希望看到这为我们实现一种管理垃圾收集的方法,方法是将部分代码包装起来,一旦完成段/语句,就可以安全地收集这些代码。当您有大量代码段时,这真的很有帮助,当您有一个允许“折叠”的编辑器时,滚动会遇到麻烦块,使它更容易专注于你现在的代码是的,我想不出一个好的理由这样做。如果它在功能上不需要{}
(如控制结构、函数等),那么这样做似乎既愚蠢又令人困惑。@prodigitalson:原因:我必须使用带有本机设置的代码编辑器(notepad++),它只对注释块(//)和功能块({})进行压缩。@Stackoverflow2000:所有原因中-“所以我可以在我的编辑器中进行代码折叠”-这肯定是最糟糕的…@prodigitalson,好吧,我认为你不使用代码折叠,是的,我认为这是一个“不好的理由”。但是如果你需要它并且不能选择你的编辑器,有一个替代品是很重要的。(注:只要你不愿意为我工作,请不要用适用于你个人工作的标准来判断我的理由)FWIW我自己也试过(来这里之前)因为我认为解决/**/style注释不能嵌套的问题可能会很有用。使用大括号,我可以定义一段代码并在顶部添加注释。所有IDE都可以让您找到给定大括号的对,这样就可以很容易地找到注释不再适用的位置,而不是无用的/*结尾*/或sim用嵌套的注释块解析ilar会更加困难。因此对我来说似乎很有用。
<?php
{
const x = 5;
echo x;
}