php day4(2019.4.10)
一、 循环结构
1.while
当型循环,当满足指定的条件时,循环执行相应的语句块
1) 语法
while(条件){
循环体
}
2) 流程
先进行条件判断,满足条件,执行循环体
再进行条件判断,满足条件,执行循环体
。。。。。
再进行条件判断,不满足条件,退出循环。
3) 应用1计算100以内的整数和
$i = 1;
$sum = 0;
while($i<=100){
$sum = $sum + $i;
$i++;
}
echo $sum;
1<=100 true
$sum = 0 + 1 ; $sum = 1;
$i =2
2<=100 true
$sum = 1 + 2 ; $sum = 3;
$i =3
3<=100 true
$sum = 3 + 3 ; $sum = 6;
$i =4
.....
99<=100 true
$sum = ????+ 99 ;
$i=100
100<=100 true
$sum = ????+ 100 ;
$i=101
101<=100 false
退出循环
4) 应用2百钱买百鸡
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
--张建丘《算经》
假设 公鸡数x, 母鸡数为y,小鸡数为z;
5x+ 3y +z*1/3 = 100 ①
x +y + z =100 ②
②*3 -1 消y
3x + 3y + 3z = 300;
5x+ 3y +z*1/3 = 100
-2x + z*8/3 = 200;
z = 75 +x*3/4;
y = 100 -x -z;
y = 100 -x -75-x*3/4
= 25-7/4x >0
0 =< x <=14

2.do while 循环
1) 语法
do{
循环体
}while(条件);
2) 流程
先执行循环体,然后进行条件判断,如果满足条件,继续执行循环体。
3) while 和do while的区别
初始条件不满足,do while 执行一次循环体,while则不执行。
应用
求两个数的最大公约数。更项取余,直到余数为零。


4) 循环体结构
一个循环的几个要素
初始值: 循环变量的初始化值
条件表达式:循环满足的条件
循环体: 循环执行的动作
步进值:循环的递增量

3.for循环
1) 语法
for(初始化表达式;条件表达式;增量表达式){
循环体
}
2) 应用九九乘法表
11=1 12=2 22=4 13=3 23=6 33=9 14=4 24=8 34=12 44=16 15=5 25=10 35=15 45=20 55=25 16=6 26=12 36=18 46=24 56=30 66=36 17=7 27=14 37=21 47=28 57=35 67=42 77=49 18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64 19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81
<table width="800" border="1">
<?php
$str = '';
//从9开始反写:$i=9; $i>=1; $i--
for($i=1; $i<=9; $i++) {
$i%2==1 ? $str .= '<tr bgcolor = "red">' : $str .= '<tr>';
for($j=1; $j<=9; $j++) {
$str .= '<td>';
if ($j<=$i)
$str .= $i .'x' . $j . '=' . $i*$j;
$str .= '</td>';
}
$str.='</tr>';
}
echo $str;
?>
</table>
3) break和continue
- break :跳出当前循环,终止for循环。
当前循环体重break语句后面的代码不执行。
break n 实现跳出指定层次的循环。
break 默认跳出一层循环
- continue :跳过当前循环体的执行,继续下次循环




二、 流程控制语句的替代写法
1) 语法
将 if ,while ,for 左大括号替换为 :
右大括号替换为
endif;
endwhile;
endfor;


三、 文件载入
多个页面均可使用的代码,可以放在公共文件中,
需要调用的时候,引入对应的文件即可。
提高代码的复用率
1.语法
include/require/include_once/require_once “文件路径”

4.原理
把代码放在文件包含的位置,执行。
5.两种路径
1) 相对路径
. 当前脚本所在的目录
.. 当前脚本的上一级目录

10) 绝对路径
C:\Users\Administrator\Desktop\bjquanzhan\day3bj


6.文件的嵌套包含
将file3.php 引入到file2.php 将file2.php 引入到file1.php




7.include 和require区别:
include 引入文件失败,返回警告信息,后续代码继续执行。

require 引入文件失败,返回致命错误,后续代码不执行。

8._once 作用
只载入一次,不重复载入。
四、 错误处理
人无完人,生活中难免会犯错,
我们在程序开发中也会遇到各种各样的错误,为了提高开发效率。PHP给我提供了一套完整的错误处理的机制,可以对PHP错误进行控制。
1.错误分类
犯罪的级别:
小偷小摸
抢劫
杀人放火
1) 语法错误(解析错误,parse error)
解析语句时,由于语句不和代码规范,因此发生解析错误,后续代码不执行,比如:缺少语句结束标志。


2) 运行时错误(run-time errors)
程序语法没有错误,但是程序运行过程中出现了错误,如:出现了未定义的变量和常量等。

3) 逻辑错误
用户自行制定的错误,如与预期的数据不一致等情况。如数据不合法。

9.错误代号
地址:wamp-php.ini

1) 系统错误
E_NOTICE:通知性错误,当发生通知性错误时,会弹出一个提示信息。它不会中断程序的继续执行,如使用了未定义的变量或者常量。

E_WARNING:警告性错误,弹出一个警告信息,也不会中断程序的继续执行,
如:include 包含了一个不存在的文件。
函数应该传参数但是未传参数。

E_ERROR :
FATAL ERROR,当发生致命性错误后,会弹出一个致命性错误的信息,并中断程序向下执行。
如:require包含一个不存在的文件。
调用一个不存在函数。

2) 用户错误
用户级别产生的错误
E_USER_NOTICE
E_USER_WARNING
E_USER_ERROR
3) 其他
E_ALL 所有错误
10.错误的触发
1) 系统自动触发
除了用户错误意外,其他错误都是由系统自动触发的 。
3) 手动触发
手动触发相应的错误程序,
一般是用户级别的错误。
触发函数,
trigger_error(‘自定义的错误信息’,[错误级别]);

4.错误的显示设置
1) 打开错误提示显示开关
①PHP.ini文件
display_errors =On
开发阶段设为On,产品上线后设为Off;
②可以在脚本中执行ini_set函数
ini_set(选项,值);
在脚本执行周期内,选项设置有效,相当于修改配置文件。
无法修改PHP.INI文件时,可以采用该方式。


2) 显示错误信息的级别
①php.ini中配置error_reporting选项


②ini_set(‘error_reporting’,错误代号)

③error_reporting(错误代号)

5.错误日志设置
项目一旦上线,需要记录错误日志。
可以通过ini_set(‘log_errors’,’Off’)关闭。

1) 错误日志默认路径****(error.log)


2) 自定义错误日志存储路径
ini_set(‘error_log’,’路径’);



6.自定义错误处理
出现错误时,不触发系统的错误处理成立,
触发用户自定义的错误触发程序。
1) 设置用户自定义处理函数
set_error_handler(错误处理回调的函数名,[错误级别]);
2) 定义错误处理函数
函数四个参数,
顺序呢分别为:错误行号,错误提示字符串,出错的文件名,错误行号。

3) 触发错误
