PHP基础 - 面向过程编程
一、PHP基础
1.1 php语法
1.1.1 PHP代码标记
asp标记:<% php代码 %>
短标记:<? php代码 ?>
短标记方式需要修改:short_open_tag = Off 改为 short_open_tag = On
脚本标记:<script language="php"> php代码 </script>
标准标记:<?php php代码 ?>,标准标记可以省略结尾?>,以<?php 开始
短标记需要开启php.ini配置文件,asp标记和script标记在php7中已经被移除,并且短标记在php7.3版本也已经移除!!!
1.1.2 PHP语句分隔符
在php代码中使用“;”英文太的分号作为语句分割符号
1.2 php变量
1.2.1 php变量基本概念
1.2.2 php变量使用
1.2.3 php变量命名规则
1.2.4 预定义变量(又叫超全局变量)
预定义变量:提前定义的变量、系统定义的变量!!!
1.2.5 可变变量
含义:如果一个变量保存的值刚好是另一个变量的名字,那么可以直接通过访问一个变量得到另一个变量的值,在变量前面再多加一个$符号
1.2.6 变量传值
值传递:
引用传递(址传递): $a = &$b
1.3 常量
1.3.1 常量定义:
1. 使用函数方式: define('常量名',‘常量值’);
2. 使用const关键字方式: const 常量名 = 值;
1.3.2 常量名定义规则:
注意:define和const定义常量的区别
1. const是一个语言结构,define是一个函数
2. const不能在条件语句中定义,而define可以
3. const可在类中使用,而define不能
4. const用于类成员变量的定义,而define不能用于类成员变量的定义
5. const定义时大小写敏感,define可以通过第三个参(为true表示大小写不敏感)数指定是否大小写敏感
1.3.3 系统常量
特殊系统常量(魔术常量):
二、PHP数据类型
2.1 数据类型说明
在php中,指的是存储的数据本身的数据类型,而不是变量的类型
2.1.1 PHP八种数据类型
php中数据类型分为三大类八小类
2.2 类型转换
在很多条件下,需要指定的数据类型,需要外部数据(当前PHP取得的数据),转换成目标数据类型
2.2.1 转换类型的2种方式
a、系统根据自己的判断转换(用得比较多,效率偏低)
b、强制转换,人为根据需要的目标类型转换
2.2.2 其他类型转布尔类型为空的情况:
① int 的0
② float 的0.0
③ 空字符串
④ 字符串的 0
⑤ 空数组
⑥ null
2.2.3 PHP类型比较
2.2.4 其它类型转数值的说明:
2.2.5 整数类型
2.2.6 浮点类型
2.2.7 布尔类型
强制类型转换
2.2.8 字符串类型
字符串定义方式:
① 单引号方式
② 双引号方式
③ 定界符声明
单引号与双引号的区别:
① 单引号不能解析转义字符,只能解析转义斜线“\”和自己本身
② 单引号不能解析变量
③ 单引号可以嵌套双引号,单引号嵌套双引号需要加转义斜线"\"
④ 双引号可以解析转义字符
⑤ 双引号能解析变量,双引号中的变量使用 {}括起来
⑥ 双引号可以嵌套单引号,双引号嵌套双引号需要加转义斜线
2.2.9 数组类型
什么是数组:array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的所有数据
数组定义方式:
① 使用array()关键字
② 使用中括号来包括数据
③ 隐形定义数组,给变量增加一个中括号,系统自动变成数组
PHP数组的特点:
① 下标可以试数字,也可以是字符串;如果是数字下标,则为索引数组,如果是字符串下标,则为关联数组,如果在下标既有数字也有字母则为混合数组
② 数组下标的自增长,默认是从0开始的,如果中间有手动指定下标,下一次自增长则从最大的下标开始增长
③ 特殊下标
说明:PHP下标不要使用特殊值,PHP元素没有类型限制,PHP中数组是很大的数据,所以存储位置是在堆区,系统为数组分配一块连续的内存地址!!!
PHP数组遍历的原理:
特殊遍历:while() + list() + each()
三、PHP运算符
3.1 普通运算符,省略...
3.2 连接运算符
a. 使用“.”将多个字符拼接在一起
b. 特殊的一个,使用“.=” 将字符连接起来(复合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边的变量)
$a .= $b 等价于 $a = $a.$b;
3.3 错误抑制符
PHP中有一些错误可能提前预知,但是又不希望用户看到,可以使用错误抑制符处理,在可能出错的表达式前面使用 "@", @($a / $b)
3.4 三目运算符
有三个表达式参与的运算
表达式1 ? 表达式2 : 表达式3 ;如果表达式1成立,则运行表达式2,否则运行表达式3
三目运算符的复合使用:
表达式1 ? (表达式2 ?表达式3 :表达式4) : (表达式5 ? 表达式6 : 表达式7)
3.4 自操作运算符
自己操作自己的运算符
++:在原来的值上+1
-- :在原来的值上 -1
PHP中自操作符“++” “--”分前置操作和后置操作,前置和后置如果只有自身操作,不参与其他运算,那么效果是一样的;但是自操作的同时还参与别的运算,那么效果就不一样了
3.5 计算机码
注意:正数的原码、反码、补码都相同,是它本身
3.6 位运算符
3.7 运算符优先级
从上往下优先级在降低
四、PHP流程控制语句
4.1 流程控制
流程控制就是代码的执行方向
4.2 控制分类
4.3 省略...
五、PHP文件操作
5.1 require和include的区别
① require是php文件在加载的时候就加载,include是php代码执行到include的时候才加载
② require加载的资源不存在报致命错误,include加载的资源不存在报警告错误,include报错不影响脚本继续执行,require报错则程序终止不再往下执行
5.2 文件加载路径
绝对路径和相对路径的区别:
① 绝对路径相对效率偏低,但是相对安全
② 相对路径相对效率高一些,但是容易出错(相对路径发生改变)
六、PHP函数
6.1 函数参数
形参:形式参数,不具有实际意义的参数,是在函数定义的时候用的参数
实参:实际参数,具有实际意义的参数,是在函数调佣时使用的参数,形参是实参的载体,实参在调用时通常需要传入到函数内部参与数据计算,那么需要在函数内部去找到实际数据所在的位置才能找到数据本身:需要实际调用的时候,将数据以实参的形式传递给形参:给形参赋值,从而使函数内部可以用到函数外部的数据
注意:
① 在php中允许实参多于形参,函数内部不使用而已
② 实参不能少于形参个数
6.2 引用传递
6.3 函数返回值
注意:
① 函数没有return返回值,打印结果时为null
② 函数return以后, return后面的代码不再执行
6.4 函数作用域
作用域:变量能够被访问的区域
函数内部修改函数外部的值:
6.5 静态变量
静态变量使用static修饰,是在函数内部定义的变量,用来实现跨函数共享数据的变量
静态变量的原理:系统在进行编译的时候就会对static这一行进行初始化,为静态变量赋值;函数在再次调用的时候会跳过static 定义变量这一行
6.6 可变函数
当前有一个变量的值,刚好是一个函数的名字,那么就可以使用变量+()的方式来充当函数名使用
6.7 匿名函数
匿名函数:没有函数名的函数
变量名 = function(){
函数体
};
6.8 闭包函数
错误使用:!!!
正确使用:!!!
七、其它
7.1 伪类型
7.2 部分常用函数
7.3 错误处理
错误处理:指的是系统(或者用户)在对某些代码进行执行的时候,发现有错误,就会通过处理错误的形式告知程序员
错误分类:
错误代码:
错误触发:
① 程序运行时触发
② 人为触发
错误显示设置:
哪些错误该显示,以及该如何显示,在PHP中有两种方式来设置当前脚本的错误处理
① php.ini配置文件:全局配置
display_errors 是否显示错误
error_reporting 显示什么级别的错误
系统默认的error_reporting = E_ALL display_errors = On
② 在php的脚本中去设置
error_log配置项:
① 开启配置 log_errors = On
② 错误日志保存路径 error_log = '/www/err/error.log'
7.4 会话技术
7.4.1 COOKIE的基本使用
cookie原理:
服务器将数据通过HTTP响应存储到浏览器上,浏览器可以在以后携带对应的cookie数据访问服务器
cookie使用:
注意:cookie能够实现跨脚本共享数据,cookie是存在客户端电脑,没有提供删除的功能,只有设置一个过期时间让它过期清除或者设置变量值为''空字符串
cookie高级使用 - 数组数据:
7.4.2 SESSION的基本使用
session原理:
session与浏览器无关,但是与cookie有关
session基本使用:
使用session的时候,任何时候都要开启session,$_SESSION是通过session_start()函数定义的没有直接定义
① 设置session:
如果想要存储数据到session中,只要不断给$_SESSION数组添加元素即可
② 获取session数据:
会话技术的本质是为了实现跨脚本共享数据,在一个脚本中定义数据,在另一个脚本中保存数据
③ 删除session数据:
清除session中全部数据:
$_SESSION = array();
session有关配置:
在服务器部署的时候改一下session.save_path路径就可以了,其他基本不用改
session常用配置:
session配置的形式:
① php.ini配置:全局配置,修改php.ini中配置项
② 脚本配置:使用ini_set()函数来配置,只会对当前运行的脚本有效
session的销毁:
session删除指的是删除session中的数据,session销毁指的是销毁session对应的文件,系统提供一个session_destroy()函数,会自动根据session_start()得到的SESSION_ID去找到指定的session文件,并把其删除。
垃圾回收机制:
垃圾回收参数配置:
session禁用:
① 禁用cookie后如何使用session
原理:session技术需要用到cookie技术来保存sessionID,从而使PHP在跨脚本的时候得到相同的sessionID,从而访问同一个session文件
解决思路:最终让session_start()在开启之前拿到原来的sessionID(另外一个脚本的)
② 实现无cookie使用session
在PHP中要想解决没有cookie也能实现session的方式有两种:
方案一:可以利用PHP提供的session_id()函数和session_name()函数来获得和设置sessionID或者name从而解决session_start()产生信的sessionID的情况
1. 在session保存数据的脚本中获取sessionID和名字,一定要在session_start()后面获取id和name
2. 相伴大将数据传递给另外一个脚本(使用url或者表单传值)
3. 在需要的脚本中获取数据
4. 阻止session_start()产生新的ID,告诉它已经存在了,使用session_id($id);
方案二:可以利用session机制中已经提供的解决方案自动操作(配置)
原因1:默认session配置只允许cookie保存sessionID
原因2:默认关闭了其他能够传送数据的方式只保留了cookie
① 修改PHP配置文件,开启其他方式传输sessionID,关闭只允许使用cookie传输功能
② 一旦开启,PHP会自动将sessionID和session名字在其他位置绑定数据,同时还会在session_start()的时候,考虑其他方式(表单)传输数据,而不是只有cookie
注意:使用中几乎不用方式二,就用PHP默认的方式