现在的位置: 首页 > 综合 > 正文

[归纳]PHP手册重读与整理-控制结构

2017年12月26日 ⁄ 综合 ⁄ 共 2324字 ⁄ 字号 评论关闭

控制结构

if
else
elseif/else if

就是不是这样,就那样吧。但是要注意:

-使用if elseif 时,如果没有最后的else边界情况,省略到空的else{}结尾;

-elseif 分开和不分开的讲究,保持可读性,都把大括号{}加上,避免有些意料之外的程序流程,也为了节约代码书写成本,就不分开了。
流程控制的替代语法

存在既是合理。这些替代语法还是很有用处的。因为mvc的存在,因为有从其他语言转过来的phper。引用一位网友的说法:

这样书写的好处是
1.使HTML和PHP混合页面代码更加干净整齐。
有代码洁癖的朋友最惧怕的就是乱七八糟的混合代码,有了这些没有花括号的替代语法,各位爱干净的朋友开心到尿震。
2.流程控制逻辑更清晰,代码更容易阅读。
要改别人的PHP和HTML混合代码,打开发现,我擦!太TMD垃圾了!如果用替代语法,我想再垃圾的程序开发人员也不至于写的太乱吧。
3.一些从ASP等其他类basic语言家族转来的朋友,会更容易使用PHP。

替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。

while
do-while

先检查,后检查;不一定会执行一次,至少保证执行一次。还有么其它区别么?没了。
for

要注意起点,终点,步近问题。当然了,你也可以搞一个;空语句的。
foreach

手册里这么说的:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。

还有一点要注意:

除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。
用过了,就不要在依赖这个数组了。保险的做法是,在进行foreach操作时,使用一个原来数组的拷贝,$orginal_array_cp。

break

-break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。
-break 可以接受一个可选的数字参数来决定跳出几重循环。

非常简单明了的总结。
continue

-continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
-continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。

注意第一点,要求为真才继续的。
switch

我理解就是if结构的扩展,用语校验值为很多种的情况。包括类型可以多种。关于性能说2点:

-switch语句,一定要有default结尾;并且,某个变量多值进行处理时,使用switch而非if elseif ;

-case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。
手册里还提到一点,允许使用;替代case的:,我不知道这么做的初衷。?

declare

说是用来做测试、性能控制的。详细的可以阅读这里。http://my.oschina.net/Jacker/blog/32936。我还是不太明白!
return

中止当前脚本的执行。不要使用括号,这和性能还有关系。还有一点:

当用引用返回值时永远不要使用括号,这样行不通。只能通过引用返回变量,而不是语句的结果。如果使用 return ($a); 时其实不是返回一个变量,而是表达式 ($a) 的值(当然,此时该值也正是 $a 的值)。

return是语言结构而非函数,所以,要合exit区分开来。
require
include

这两个家伙还真是复杂。先来说说它们的基本区别吧:

从字面意思理解,req包含失败了,就会产生fatal error,而inc只是一个warning。也就是说:如果想在丢失文件时停止处理页面,那就别犹豫了,用 require 吧。 include 就不是这样,脚本会继续运行。

作用域问题:

在那里包含,作用域就继承这行遵循的作用域。

引用路径问题:

可以通过incldue_path(inlcude_path在php.ini中设置好。)来引入文件,也可以通过http来进行包含(如果“URL fopen wrappers”在 PHP 中被激活(默认配置))。但是,想想就知道,这种包含不安全啊。人家代码都是执行后了,那么就只是适用于返回值的获取。那为何不使用file扩展来完成呢?!

其他问题:

同理,它们是语言结构,那就不需要括号啊,不是函数呢。所以,在进行返回值比较时候,需要把它们都用()包括起来。

require_once
include_once

和上面那两个差不多的用法,但是,只会包含一次。

php5以后,大小写问题被改进了,不用为此担心。但是还是建议,不要用大小写来区别有关联的脚本文件。
goto

哎,好好的硬是要搞这些。手册上说的:

goto操作符可以用来跳转到程序中的某一指定位置。该目标位置可以用目标名称 加上冒号来标记。PHP中的goto有一定限制,只能在同一个文件和作用域中跳转, 也就是说你无法跳出一个函数或类方法,也无法跳入到另一个函数。你也无法跳入到任何循环或者switch 结构中。常见的用法是用来跳出循环或者switch,可以代替多层的break。

抱歉!评论已关闭.