php语法记录2
六、数组
1.数组的概述
- 什么是数组
- 数组就是一组数据
- 概念
- 键:在数组中[]内用于区分不同值表示的就是键。
- 值:在数组中键对应的数据就是值。
- 键值对:键+值就是键值对。
- 下标:键就是下标。
- 元素:元素就是键值对
- 索引数组:当数组的下标是数字的时候,那么这个数组称为索引数组。
- 关联数组:当数组的下标是字符串而不是数字的时候,那么这个数组被称为关联数组。
- 混合数组:当数组的下标既有数字下标也有字符串下标的数组通常称为混合数组。
2.数组的定义方式
-
使用语言结构来声明数组
- 格式1:
array(值1,值2……);
不指定下标的数组,下标是从0自动增长的连续数值。 - 格式2:
array(键=>值,键=>’值’……);
指定下标,下标为用户指定的值(即可声明关联数组,也可声明索引数组,包括混合数组)
- 格式1:
-
使用指定语法声明数组 php版本>5.3
- 格式1:
[值1,值2,……]
不指定下标,声明索引数组 - 格式2:
[键=>值,键=>值]
指定下标,既可以声明关联数组也可以声明混合数组既索引数组
- 格式1:
-
通过添加数组元素的方式声明数组
- 格式1:
变量[下标] = 值;
使用添加数组元素的方式声明数组,既可以声明关联数组,也可以声明索引数组及混合数组。 - 格式2:
变量[] = 值
该方式声明的数组为从0开始连续下标的索引数组
- 格式1:
3. 使用、添加、修改、及删除数组元素
-
使用数组元素
-
使用数组所有内容
查看数组的方式:var_dump()另一种print_r()两种方式都可以查看数组
区别:var_dump()和print_r都是用于查看数组内容的方法,不同的是var_dump()可输出数组的内容和类型,而print_r()仅能输出内容。
注意:数组变量不能使用echo输出。会报错。 -
使用某个元素的内容
格式:数组变量[下标]
-
-
添加数组元素
方法1:数组变量[] = 值
注意:该方法添加的元素一定是索引数组元素。
添加时的下标是当前数组的最大索引下标值+1;
方法2:数组变量[下标] = 值
该方式既可以添加关联数组,也可以添加索引数组。 -
修改数组元素
格式:数组变量[下标] = 新值; -
删除数组元素
unset(数组变量[下标])
数组变量[下标]就当变量用,变量怎么用他就怎么用。
记住一句话 数组元素就是变量。
4. 删除、清空数组及介绍几个概念
- 删除数组:同时删除数组的所有元素之和类型
unset(数组变量); - 清空数组:仅删除数组的元素,不删除类型
数组变量 = array() - 一维数组:如果数组中得所有元素的值都是除了数组类型之外的,那么这个数组就是一个一维数组。
- 二维数组:一个一维数组的元素具有另外一个一维数组的时候,该数组就是一个二维数组。
- 多维数组:在二维数组的基础上,如果其中元素的值还是数组类型的话,那么这个数组就是一个多维数组。
5. 数组的遍历
- 什么叫遍历:所谓的遍历就是一个一个来看。
- 遍历数组方式1:使用for循环来遍历连续的索引下标数组
- count() 统计数组的长度(元素个数)
参数:要统计数组长度的数组变量
返回值:返回该数组的元素个数 - 遍历数组方式2:数组专用格式foreach
- 格式1: 遍历数组 同时获取键和值
foreach(数组变量 as 键变量=>值变量){
循环体
} - 格式2: 遍历数组 只获取值
foreach(数组变量 as 值变量){
循环体
}
- 格式1: 遍历数组 同时获取键和值
6. 系统预定义变量
- 系统预定义变量是系统提供的一些数据变量,这些数据变量都是数组类型。
- $_GET 接收页面以GET方式提交的数据(超链接、form表单)
- $_POST 接收页面以POST方式提交的表单数据。
注意:如果表单中method方式以get方式传承,那么action属性中就不能以get方式传承会冲突。
———- 以上内容必须记住 - $_SERVER 返回服务器和运行环境信息
- $_COOKIE
- $_SESSION 会话控制
- $GLOBALS 函数作用域
七、函数
- 什么是函数
函数就是你一条最忠诚的小狗狗。
函数就是一个功能
is_float() isset() unset() empty() count() mt_rand() 等等 都是函数 - 函数的学习流程
- 学习函数的定义 ☆
- 学习如何自定义函数 ☆☆☆☆☆
- return语句的作用 ☆☆☆☆☆
- 函数的参数 ☆☆☆☆☆
- 函数的变量作用域(变量范围) ☆☆☆
- 引用传参 ☆☆☆☆☆
- 静态函数 ☆
- 变量函数 ☆
- 回调函数 ☆☆☆
- 递归函数 ☆☆☆☆☆
- 内部函数 ☆
- 闭包函数 ☆
- 文件的包含 ☆☆☆☆☆
- 函数的分类
- 根据是否是系统自带,系统函数和自定义函数 (unset() isset() 系统自带的 系统函数) 自己定义的自定义函数
- 根据是否具有返回值:带返回值的函数和执行过程的函数
- 根绝函数结构的不同:
- 一般函数
- 变量函数
- 回调函数
- 内部函数
- 递归函数
- 闭包函数
1. 自定义函数的语法结构:
基本格式:
function 函数名(形参){
PHP语句 (函数体)
}
1. 函数的姓就是function 不能省略
2. 函数名
- 可以使用英文,不允许使用中文。
- 可以使用数字,但是不能用数字开头。
- 不能使用特殊字符,_除外。
- 函数名不区分大小写。
- 函数声明要有意义。
- 不可以和已经存在的函数(系统函数和自定义函数)重名
3. 函数的特征:
- 函数定义之后,不调用不执行。
- 函数调用不分先后,因为PHP解析器在执行这个页面代码之前就已经预先加载了函数的内容。
2. return语句的作用
- 具有return语句的函数就是有返回值的函数。
- 没有return的语句就是执行过程函数。
- 作用1:如果函数中存在return并且执行了该return语句,那么该函数的执行结果就可以被变量接收。
好处:可以继续使用该结果做运算或者其它操作。 - 作用2:如果函数的执行过程中执行了return语句,那么后续代码都不在执行。
- 注意:一个函数中可以有多个return语句,但是程序只能执行一个,一般多个return语句都是使用分支结构分开存放。
- echo 和 return 区别
- 如果该函数执行的结果需要用到其它地方 那么该函数需要使用return语句。如果不需要那么该函数可以使用echo输出。
- echo – 放了个屁 很臭。 return 有实质性的东西出来
3. 函数的参数
- 参数分为形参和实参2部分。
- 形参就是形式上的参数,在定义函数的括号中使用
- 实参就是实际上的参数,在调用函数的括号中使用
注意:☆☆☆☆☆- 如果函数有定义形参,那么调用函数时必须传入对应的实参。(形参没有默认值的情况)
- 如果函数同时具备形参的默认值,并且传入了实参,那么以传进来的实参值为主。(相当于变量赋值,用实参的值赋值给了形参)
- 如果要传入实参,必须和形参的位置一一对应。
- 如果形参中具有多个形参有默认值,将最有可能传入实参的形参放入前面。
- 如果函数同时具有默认值的形参和没有默认值的形参,那么没有默认值的形参一定要放到有默认值的形参前。
- 传入的参数一定要和形参对应,免得出现逻辑问题。
4. 函数的变量作用域 (就是函数相关的变量的作用范围)
- 局部变量
- 在函数中定义的变量就是局部变量,其作用范围仅限函数的内容。
- 形参也是函数内部的变量,也是局部变量
- 全局变量
- 普通变量
- 在函数外部声明的变量,其作用范围就是当前页面部分,函数内部无法使用。
- 全局变量
- 在函数的内部和外部都可以访问和使用的变量就是全局变量
- 实现全局变量方法1:
- 在函数外部具有一个变量
- 在函数内部也具有一个同名变量
- 在函数内部的同名变量前使用global关键字修饰,既可以实现全局变量
- 注意:global声明全局变量时禁止赋值。
- 如果一个变量在函数内部已经赋值,之后使用global进行全局化声明,结果是该变量的值变为函数外部变量的值
- 实现全局变量方法2:
$GLOBALS- 在函数内部可以使用$GLOBALS[变量名]的方式直接调用函数外部的变量值,此时函数内外都可以使用,实现了另一种方式的全局变量。
- 普通变量
5. 静态变量
1. 在函数内部使用static声明的变量就是静态变量
- 静态变量的特征
1. 静态变量只会被初始化一次
2. 静态变量在函数运行结束后不会被回收
3. 静态变量一般用于计算函数调用次数。
6. 引用传参
-
在设定函数形参时,如果在形参变量之前添加&符号,就表示实参传递时要以引用传递的方式(变量引用赋值)将实参值传递给形参。
-
如果使用引用传参,那么函数内部的引用传参的形参值发生改变,对应外部实参变量的值也发生改变,效果类似于全局变量。
-
学习系统函数主要学习三点
- 函数的作用
- 函数的参数
- 函数的返回值
7. 变量函数
- 当一个变量的值是某个函数的名称字符串时,我们可以使用变量名()的方式调用对应名称的函数,这种调用方式就是变量函数
- 例子:$var = ‘demo’;
function demo(){
php代码
} - 变量函数的使用:$var(); 等价于 demo();
8. 回调函数
- 回到函数只是变量函数的一种变量,本质上还是变量函数的应用。
- 在一个函数(A函数)中,通过变量函数的的方式$var()调用另外一个函数(B函数,C函数),而其函数的名称通过A函数的参数传递进来,这种方式就是回到函数。因为函数A中的变量函数$var() 会根据用户传入不同的实参回过头调用不同名称的其他函数。
function a($var){
$var();//回调函数要素1,变量函数
}
a(‘b’)//在a函数中调用b函数 回调函数要素2.传入函数名称字符串。
9. 内部函数 (了解级别)
- 什么是内部函数,在函数内部声明的函数就是内部函数
- 在函数外部是否可以调用内部函数
- 不可以直接调用,但是如果调用外部函数之后,就可以任意调用内部函数
- 在函数内部是否可以调用内部函数
- 可以调用,但是必须在内部函数定义之后调用,因为PHP解析器只会加载外部函数并不会执行外部函数,所以不知道外部函数中还有内部函数。
- 在函数外部是否可以调用内部函数
10. 递归函数(☆☆☆☆☆)
- 在一个函数中调用当前函数本身,这种函数格式就是递归函数
11. 匿名函数
- 如果声明一个函数,而该函数没有函数名,那么这个函数就是匿名函数
- 用法:用变量接收匿名函数
变量名 = function (){
函数体
};(注意这里必须有分号结束,因为匿名函数属于表达式)
12. 闭包函数(了解级别)
-
在子函数内部使用通过use关键字使用父函数的变量,这种方式就是闭包函数
格式: function 父函数(){
//父函数的局部变量
$var = 值;
//声明匿名函数并且使用use格式实现闭包
变量 = function() use(父元素变量){}; }
13. 匿名回调
匿名回调格式:调用函数(传入你明个函数)
回调函数的区别:
1.以字符串方式传入的回调函数
2.以匿名函数方式传入的回调函数
3.字符串方式传入的回调函数,该函数可以使用多次,任意调用,因为这是一个预先加载的普通函数,匿名函数方式传入的回到函数只可以在当前回调函数中使用,其他地方无法使用。
4.匿名函数的回到函数方式效果高,因为回调函数运行完毕,匿名函数既被回收,而字符串方式传入的函数由于是预先加载的普通函数,所以在页面没执行完毕时,永不消失。
14. 可变长度参数列表
- 在函数中,实参实际传入个数允许超过形参的个数,在此情况下如果想获取所有传入的实参,可以使用函数func_get_args()来获取所有实参组成的数组,在函数内部进行其它操作。
注意:func_get_args()仅在函数内部使用。
15. 系统函数手册学习:(记住)
bool copy(string $source,string $dest);
1.常规函数
2.带有mixed的函数,表示可以穿任何类型的数据变量或者值都可以。
3.带有&符参数的函数,表示这个参数不能穿数值,只能传递一个变量,函数中将变量的值改变,我们在函数外部使用这个变量时也是变化的
4.带有中括号[]函数,表示这个参数是可选的。如果你传值了就使用你传的值,如果没有传值,就使用默认值也叫默认函数。
5.带有...的参数函数,表示可以传入任意多个参数。
6.带有callable的参数函数,表示这个位置需要传递一个回调函数。
16. 文件的包含
-
include 文件的包含
作用:相当于将文件的内容复制到执行的文件当中。常用语包含数据库或者是配置文件等,但是任何的PHP文件都可以包含。 -
include_once 单次的文件包含
作用:相当于将文件的内容复制到指定的文件中,但是如果文件已经包含过,将不再包含,返回true值。 -
include和include_once的区别:
- inlcude包含文件可以包含N次,而include_once只能包含一次
- include的效率略高于include_once,因为include_once需要判断。
- include包含文件成功返回数值整型1,但是include_once第一次包含文件返回1,以后包含相同文件返回true;
-
require 文件包含 (请求 需要) 作用和include几乎相同 将一个文件请求到另一个文件中。
-
include 和 require的区别(☆☆☆☆☆)
- include包含文件如果包含失败,提示warning级错误。
- require 包含文件如果包含失败,提示error级别错误。
- include包含文件失败,后续代码继续执行。
- require包含文件如果失败,后续代码将不再执行。
-
require_once
- 作用:相当于用require的方式,仅包含一次文件,功能类似于include_once 都是一次包含。
- require和require_once的区别相当于include和include_once的区别。
-
文件包含的格式都有两种,一种是指令的格式,一种是函数的格式,并且对于文件包含的四个功能都有返回值。
-
函数格式
返回值 = include(‘需要包含的文件路径’);
返回值 = include ‘需要包含的文件路径’;返回值 = include_once(‘需要包含的文件路径’);
返回值 = include_once ‘需要包含的文件路径’;返回值 = require(‘需要包含的文件路径’);
返回值 = require ‘需要包含的文件路径’;返回值 = require_once(‘需要包含的文件路径’);
返回值 = require_once ‘需要包含的文件路径’;
-
八、时间模块
-
世界人民表示时间的方式不一样,存储不方便,计算不方便。不同的时间表示方式影响世界人民大团结,不利于沟通和计算。
-
计算机中统一时间的方式是使用Unix时间戳
-
什么是时间戳呢?
- 之前:从1970年1月1日0时0分0秒开始到指定时间的秒数,时间戳属于整型数据类型,PHP的时间戳从1970年开始最大表示到2038年1月19日(32位)
- 准确:有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合 32 位有符号整数的最小值和最大值)。
-
时间模块 以时间函数的学习为主
- time() 获取当前时间戳
- date() 格式化一个时间
@param1 格式化时间字符
@param2 可选参数 设定要格式化的时间戳 如果没有设定,默认是当前时间 - 格式化时间字符常用:
Y – 4位数的年
d – 2位数的天
m – 2位数的月份
H – 小时 24小时格式
m – 分钟 00-59
s – 秒数 00-59
-
服务器默认的时间都是国际统一时间,格林尼治时间,所以在使用服务器时需要设置当前服务器时区位于用于指定的时区。
-
设定方法1:修改PHP配置文件 PHP.INI
查找:date.timezone = ‘Asia/Shanghai’
设置选项:date.timezone = 大洲/城市
注意: 1.必须在支持的时区列表中选取。
2.设置之后必须重启apache. -
设置方法2:修改PHP配置文件 php.ini
查找:date.timezone = ‘ETC/GMT-8’;
注意:必须在支持的时区列表中选取。
设置之后必须重启apache -
设置方法3:修改PHP配置文件 php.ini
查找:date.timezone = ‘PRC’;
注意:必须在支持的时区列表中选取。
设置之后必须重启apache -
使用函数修改当前页面的时间
使用date_default_timezone_set()函数来设置时区,其参数和配置文件中的date.timezone的值一样,现实中使用该方法时,会在每个页面的开始部分包含并且运行该函数。
-
-
跟时间相关的函数
- getDate() 获取当前时间
- 返回值:返回当前时间信息数组
- 参数:默认是当前时间戳
‘seconds’ => int 55 秒
‘minutes’ => int 15 分钟
‘hours’ => int 12 小时
‘mday’ => int 6 月份中日的表示
‘wday’ => int 5 一周中日期的数值表示
‘mon’ => int 3 月份的数值表示
‘year’ => int 2020 年份的数值表示
‘yday’ => int 65 一年中日的数值表示
‘weekday’ => string ‘Friday’ (length=6) 一周中日的完整文本表示
‘month’ => string ‘March’ (length=5) 月份的完整文本表示
0 => int 1583496955 时间戳
九、错误异常处理模块
-
网站报错结果
- 懂程序的的人看
东程序的人->泄露网站信息->想办法破解权限->添加广告病毒->用户登录发现全是广告病毒,->下次不来->人气下降->没有流量->没钱->失业->没钱->没媳妇->没孩子->没人养老->孤独终老。 - 不懂程序的人看
不懂程序的人看->>下次不来->人气下降->没有流量->没钱->失业->没钱->没媳妇->没孩子->没人养老->孤独终老。
- 懂程序的的人看
-
如何防止孤独终老
-
认识错误
; E_ALL 所有的错误
; E_ERROR – 致命性的错误(程序已经运行部下去了)
; E_WARNING – 警告级别的错误(还能运行,但是已经报警了)
; E_NOTICE – 提示级别的错误(轻微的一个错误)
; E_STRICT – 编码标准化警告
; E_CORE_ERROR – PHP启动时初始化过程中的错误(PHP没有启动)
; E_CORE_WARNING – PHP启动时初始化过程中的警告
; E_COMPILE_ERROR – 编译时的致命错误
; E_COMPILE_WARNING – 编译时的警告错误
; E_USER_ERROR – 用户自定义的致命错误
; E_USER_WARNING – 用户自定义额警告
; E_USER_NOTICE – 用户自定义的提示 -
错误的三个级别
error 致命错误 会终止程序运行
warning 警告错误 不会终止程序的运行
notice 提示 算不上错误 -
如何解决错误
-
让不该看到的人看不到 (老板、用户、黑客)
- 使用错误抑制符@,只能单行屏蔽错误而且效率低。
-
修改PHP配置文件中的display_errors选项,设置为On显示错误,设置为Off为不显示错误。
-
修改error_reporting选项,可以定义任意类型的错误输出或者不输出。
-
使用error_reporting()函数,可以和配合文件中的error_reporting选项设置实现相同的效果,设置的值也是一样的。
- & 表示并且
- ~ 表示除了某一个
- E_ALL & ~E_NOTICE 表示报所有错误 但是除了NOTICE的
-
让该看到的人看到(网站开发人员)
- 关闭配置文件中display_errors设置为off
- 设置错误的存储类型,设置配置文件中error_reporting选项指定需要存储的错误类型
- 开启错误日志记录的开关 设置配置文件中的log_errors= On
- 找到配置文件error_log=saylog 错误记录位置(windows系统错误位置尽量不要用)
- 找到配置文件error_log= 设置指定错误输出的文件位置
-
-
比较灵活的处理错误的方式 set_error_handler() 用户接管错误处理方式
注意:对于回调函数需要接受至少4个参数,分别是错误号,错误内容,错误文件,及错误所在的行。
-