按位运算在状态标示中的使用。【减少数据库存储以及更加快速的处理逻辑处理】
1&1=1
1=1=2
速度快节省空间
【以上即可】
1.switch做分支处理
switch(状态量){
case 值1:
情况一执行的情形;
[break;]//可以省略break跳出这个switch【这里就是强制结束的情形,加break可以提高执行效率】
...
default:
进程default;
}
以上即可。
php在处理switch时,将其当做循环来处理,所以才会导致break使用跳出循环的语法。【也可以使用continue】
2.for做循环结构
循环的执行过程:
先执行循环体,后进行加加运算
for($i=0;$i<5;$i++) {
echo $i.'<br>';
}
输出结果是:
0
1
2
3
4
以上就表示了循环体内部的执行顺序:
(1)初始化循环体变量
(2)根据判断结果,看是否执行循环体
(3)如果执行循环体之后,对循环体变量进行递变【然后进入下一个循环阶段】
以上就是循环的结构处理
【在循环体内也可以对循环体变量进行修改,从而实现循环体内的控制,但是尽量不使用】
3.while做循环结构
//条件初始化语句
while(条件){
循环体【对循环变量进行操作】
}
用于循环条件确定,但是循环次数不确定【相比于for循环来说】
【while用于对一个不确定的结果中进行循环处理】
但是在不确定数时for也可以使用。
另外还有do-while【区别在于,本循环体是先执行后判断,于是条件和正常逻辑有一定的区别】
do{
循环体
}while(条件);
while和dowhile的区别就在于循环体的执行顺序,其实本质上没有太多区别,就是语法题目会提到。
4.循环终止【break和continue】
break将循环体跳出
continue跳出本次循环【continue之后的代码不会被执行】,进入下一次循环
循环嵌套情形:
for ($i=1;$i<10;$i++){
for($j=1;$j<=$i;$j++){
echo $i.'*'.$j.'='.$i*$j;
echo '    ';
}
echo "</br>";
}
以上表示通过循环嵌套实现乘法口诀表的过程
嵌套的关键就是如何在被嵌入的循环中合理控制循环变量的关系,便能很轻易的控制循环嵌套
【二维结构都需要使用循环嵌套】
5.goto分支【php5.3以上版本可以使用】
goto相当于综合了流程控制和continue指向要运行的次数情况。
goto对整个流程的处理更加简单
<?php
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
if($j==17) goto end;
}
}
echo "i = $i";//这段代码完全不执行
end:
echo 'j hit 17';
//上面的例子输出结果为: j hit 17
?>
实际编程中使用比较少,在函数内进行goto跳转到函数外时,不会正确。
例如
function本身有作用域的概念
【goto是全局时,可以跳到分支中,但是不能跳到循环体内(包括switch语句)】
【但是循环体内可以使用goto跳转到全局中的情况】
【goto只是一种对循环体或者分支控制的语法,并不存在对作用域的影响,只是因为作用域的不同,会有不同的作用效果】
function sayhello(){
goto outer;
}
sayhello();
outer:
echo "hello world";
//这个是会报错的
6.文件载入
include、require、require_once、include_once
将目标文件的代码,载入到当前文件。【这就是include等的出现场景】
用于框架中的代码重用的场景。
【注意】
文件的载入中,文件的类型不重要,我们只看重文件的代码【即使包含文件时HTML,但是只要其内部有php代码,就按照php代码执行】
【注意这一点,这一点也就是文件载入和file_open()函数的区别】
include这样的方法,其实是载入文件之后,并执行该文件中可以被执行的代码
文件载入中的路径问题:
磁盘的文件地址【网络文件地址http这样协议使用URL来进行文件定义】
而文件载入中的方法(include)使用磁盘文件地址【include不能使用网络地址上的文件来进行载入】
【网络中引入文件的方式本身就比较受限】
【而文件载入使用的路径有绝对路径和相对路径之分】
对于相对路径和绝对路径不需要太过纠结。
【注意:】
包含文件中,使用相对路径时,相对路径相对的当前路径是指代码的执行位置,而不是引入的定义地址。【这也就是框架中使用的都是绝对路径】
a.php中include(./b.php);//而当b.php文件中也有包含文件的情况出现时,其实此时的当前位置是a.php
在include不需要考虑输出的问题,因为文件载入针对的本身就是代码的执行,其他文件都可以被引入【例如html文件本身就是指输出】
只是使用include时,会因为出现header()函数而导致对输出有疑问【需要对输出的header进行研究】
【因为如果include被包含的文件中使用header的话,有可能包含文件的内容已经出现输出的问题,会出现报错的问题】
7.include_path的使用方法【框架中常用的函数】
include中出现'./'和单纯指出当前位置的区别:【./file.php与file.php在包含方面的区别】
'./'指的只能是执行代码的文件的当前路径。
没有'./'指代的当前文件的当前路径【正常情况下再当前路径下查找包含文件,但是如果执行代码位置处不能正常包含,那么便会在代码所写的位置上进行文件载入】
注意这一点例子。
另外【针对没有'./'声明的情况。如include('file.php');用来标示包含时】
include中文件载入,还会查找用户自定义的路径【如php设置中的include_path情况】
而且require的顺序是:【require(file.php)方法的使用时查找文件的顺序】
(1)先查找文件声明的路径【include_path】【这个的优先级最高,也是框架中项目的最先路由的位置】
(2)查找代码执行的位置
(3)查找代码定义的位置
set_include_path()函数的用法
include_path()的用法场景本身就是用在大型项目中用作指定路由的情况【这样可以将最常被引入的文件统一放在一个路径中】
【公司现在的项目就使用这个函数用来指定控制器文件和compenont组件】
【注意这样的情况下,包含文件时,不能使用‘./’来表示当前路径,当然引入的地址本身也不是当前路径】
多个目录进行set_include_path()时,如果多次使用set_include_path()时,后面写set_include_path()会覆盖前面的set_include_path()函数。但是可以一次性设置多个【并且进行获取已有的设置】,使用分号进行分割处理即可【window下是';'linux下是':',php使用预定义常量(PATH_SEPARATOR)来表示该分割符!!!】
例如:set_include_path('filedir'.';'.'get_include_path');//这样便能新添加生效的搜索路径【重点!!!!】
文件和目录的遍历问题是一个系统需要特殊注意的问题
【特殊注意这一点的使用情况】
'./'或者'../'的文件形式就不能使用include_path设置方法