1、COW机制
Copy On Write 写时复制。变量在写入时才真正复制一份内存进行修改。
一种内存优化手段
详情见:http://www.nowamagic.net/librarys/veda/detail/1454
2、php 字符串得四种表达方式
使用单引号进行定义(速度较快)
使用双引号进行定义
heredoc(类似双引号)定界符
nowdoc(类似单引号)
3、不要用等号去比较浮点数
原因:因为计算机在计算浮点数时,会将浮点数转换为二进制数,难免会造成精度丢失。
4、输出结果为false的其中情况
整型为0时 0
浮点 0.0
boolean false
空字符串: ' '
0字符串: '0'
空数组: []
空类型 null
5、为null的三种情况
直接赋值变量为null、未定义的变量为null 、使用函数unset()销毁的变量为null
6、运算符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。(错误抑制符,使用时,会忽略代码报错)
运算符优先级:递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符( ^ ) > 位运算符( | ) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or
括号可以增加代码可读性
递增/递减运算符不影响布尔值
递增NULL值为1,递减NULL值没有效果
逻辑运算符短路效应:&& 或 || ,当左边部分符合条件是,右边部分将不会执行
7、遍历数组的三种方式
第一种 使用for循环遍历 (只能遍历索引数组)
第二中 使用foreach遍历数组 (可以遍历索引数组和关联数组)会reset()
第三种 使用while、list()、each()组合循环 (可以遍历索引数组和关联数组) 不会reset()
注:reset()意思为是指针指向数组的第一个元素
8、include和required的区别
无论require位置如何,指定文件都将包含到出现require的脚本中。例如,即时require放在计算为假的if语句中,依然会包含指定文件
加载过程中,如果未找到文件则include会发出一条警告,而require会发出一个致命错误
require(include)/require_once(include_once)唯一区别是后者PHP会检查该文件是否已被包含过,如果是则不会再次包含
9、一些字符串函数
例:strlen 计算字符串长度 sub_str() 截取字符串 strstr () 查找字符串中某个字符的位置
str_repeat() 重复写入某个字符
注:其他详见php手册
10、数组函数
例 :count() 计算数组长度 array_column() 获取数组的某一列,重新组成一个数组
array_key_exits() 检测数组的某个键值是否存在 array_sum() 求数组所有元素的和
array_merge() 数组合并
注:其他详见php手册
11、可变函数
如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
例:
结果:
12、正则表达式
作用:分割、查找、匹配、替换字符串
preg_match($pattern, $subject, $match):执行匹配正则表达式,匹配一次,返回pattern的匹配次数
preg_match_all($pattern, $subject, $match):执行一个全局正则表达式匹配,全局匹配,返回全局匹配的次数
preg_replace($pattern, $replacement, $subject):执行一个正则表达式的搜索和替换,返回全部结果
preg_filter($pattern, $replacement, $subject):执行一个正则表达式的搜索和替换,仅仅返回(可能经过转化)与目标匹配的结果
preg_grep($pattern, $subject):返回给定数组$subject中与$pattern相匹配的元素组成的数组
preg_split($pattern, $subject):类似explode()函数,通过一个正则表达式分隔字符串
preg_quote($str):转义正则表达式字符
13、会话控制
为什么要使用会话控制技术?因为HTTP协议是无状态的,为了保存用户信息,所以使用会话控制技术。
Cookie:存储在客户端,不占用服务器资源,但是不安全
Session:存储在服务端,占用服务器资源,比较安全
Session是基于Cookie的,用户禁用Cookie也可以使用Session,可以用session_name()、session_id()函数或SID常量传递SessionID (SID在用户开启Cookie时为空,关闭时有值)
14、文件函数
例:fopen() 打开一个文件或url (可用于检测网络是否连接)
fclose() 关闭一个文件
file_exists() 检测一个文件是否存在
file_get_contents() 将整个文件读入一个字符串
file_put_contents() 将一个字符串写入文件
move_upload_file() 移动一个文件 (用于文件上传)
注:其它详见https://www.php.net/manual/zh/ref.filesystem.php
15、HTTP协议
特点:HTTP协议是无状态、无连接的;基于B/S模式;通信开销小、简单快速、传输成本低;使用灵活、可使用超文本传输协议;节省传输时间。
工作原理
客户端发送请求给服务器,创建一个TCP连接,指定端口号,默认为80,连接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容。
HTTP请求方式
GET 请求指定的页面信息,并返回实体主体
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断。
HTTP状态码
- 1** 信息,服务器收到请求,需要请求者继续执行操作
- 2** 成功,操作被成功接收并处理
- 3** 重定向,需要进一步的操作以完成请求
- 4** 客户端错误,请求包含语法错误或无法完成请求
- 5** 服务器错误,服务器在处理请求的过程中发生了错误
常见状态码
- 200 请求成功
- 301 资源(网页等)被永久转移到其它URL
- 404 请求的资源(网页等)不存在
- 500 内部服务器错误
16、OSI的七层模型
应用层 7
表示层 6
会话层 5
传输层 4
网络层 3
数据链路层 2
物理层 1