1,PHP引用变量的考察点:
概念:引用就是用不同的名字访问同一个变量内容。
定义方式: 使用&符号。
- PHP引用变量的工作原理
这里有个COW copy on write 用zval()去查看空间占用情况以及引用情况。
- unset 只用取消引用不会销毁
- 当引用变量的值被改变,那么原空间的值也随之改变
- 对象本身就是引用引用传递
2,常量及数据类型
- 字符串的定义方式和区别
定义方式:单引号,双引号,heredoc 和 newdoc
单引号:单引号不能解析变量;单引号不能解析转义字符,只能解析单引号和反斜线本身;变量和变量,变量和字符串、字符串和字符串之间可以用.点来连接;
双引号:双引号可以解析变量,变量可以使用特殊字符和{}包含;可以解析所有的转义字符;也可以使用点来连接;
单引号的效率高于单引号;
2.数据类型(八大数据类型)
(1)浮点类型(不能用于精确的相等的计算)
(2)布尔类型 false 的7种情况
整型0,浮点0.0,空字符串' ',0字符串‘0’,布尔false,空数组array(),NULL
(3)数组
超全局数组
$_GET[] 获得以GET方法提交的变量数组
$_POST[] 获得以POST方法提交的变量数组
$_COOKIE[] 获取和设置当前网站的Cookie标识
$_SESSION[] 取得当前用户访问的唯一标识,以数组形式体现,如sessionid以及自定义session数据
$_ENV[] 当前php环境变量数组
$_SERVER[] 当前php服务器变量数组 (列举常考的点)
- $_SERVER[‘SERVER_ADDR’] 当前运行脚本所在的服务器的 IP 地址。
- $_SERVER['SERVER_NAME']当前运行脚本所在的服务器的主机名
- $_SERVER['REQUEST_TIME']请求开始时的时间戳
- $_SERVER['QUERY_STRING']query string(查询字符串),如果有的话,通过它进行页面访问
- $_SERVER['HTTP_REFERER'] -- 链接到当前页面的前一页面的 URL 地址。
- $_SERVER['HTTP_USER_AGENT'] -- 返回用户使用的浏览器信息。也可以使用 get_browser() 得到此信息。
- $_SERVER['HTTP_USER_AGENT'] -- 返回用户使用的浏览器信息。也可以使用 get_browser() 得到此信息。
- $_SERVER['REQUEST_URI'] -- 访问此页面所需的 URI。例如,“/index.html”
$_FILES[] 上传文件时提交到当前脚本的参数值,以数组形式体现
$_REQUEST[] 包含当前脚本提交的全部请求,$_GET、$_POST、$_COOKIE的所有动作 $GLOBALS[] 包含正在执行脚本所有超级全局变量的引用内容
(3)NULL 三种情况
-
- 直接赋值为NULL
- 未定义的变量为NULL
- unset销毁的变量为NUll
常量
定义常量 。const 、define,const更快因为是语言结构,define是函数;const 可以定义类的常量,define不行;
预定义常量:
__LINE__ 文件中的当前行号 __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。
__CLASS__ 类的名称
__TRAIT__ Trait 的名字
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
3、PHP中运算符
错误控制符 @放在一个PHP表达式前,该表达式产生的任何错误信息都会有被忽略掉
运算符的优先级 (常用列举,具体查看运算符优先级表)
递增/递减>!>算数运算符>大小比较>(不)相等比较>引用>位运算符(^)>位运算符(|)>逻辑与>逻辑或>三目>赋值>and>xor>or
括号的使用可以增加代码的可读性,推荐使用
比较运算符
==和===的区别 双等 是值相等 三等是要求值和属性都相等
递增递减运算符
递增递减运算不影响布尔值
递减NULL值没有效果
递增NULL 值为一
递增递减在前就先运算后返回,反之就是先返回后运算
逻辑运算符
短路作用 如 $b==false && $a==1
|| && or and 的优先级不同 如$a = false or true;返回时or; $a = false || true; 返回时true;
4、PHP中流程控制考点
PHP遍历数组的三种方式以及各自的区别
for,foreach,while/list()/echo()组合循环
for循环只能遍历索引数组,foreach可以遍历索引和关联数组,while和list(),echo()也同样可以。
foreach遍历会对数组进行reset()操作;
if....elseif
只能有一个表达式为true,既在一个ifelse语句中只能有一个语句块被执行,多个elseif从句是排斥关系,使用elseif语句有一个原则总把条件范围小的优先放在前面处理
switch....case 表达式后面的控制表达式的数据类型只能是整型,字符串,和浮点型;
continue的作用相当于break,跳出switch 外的循环可以使用continue2
会生成跳转表,直接跳到对用的case
效率 如果条件比一个简单的语句复杂的多,或者在多个循环中 switch...case 会更快
5.自定义函数和内部函数的考点
变量的作用域和静态变量
变量的作用域也称变量的范围,变量的范围就是它上下文的一个背景 ,大部分PHP变量只有一个单独的范围。这个单独的范围跨度同样包含了include和require的引入文件
golbal关键字
$GOLBALS以及其超全局数组($_GET,$_POST,$_COOKIE)
静态变量
静态变量只在局部函数域中存在,但当程序执行离开此作用域时,其值并不会消失。
static 关键字 的特点
1,只初始化一次
2,初始化时需要赋值
3,每次执行函数该值会被保留
4,static修饰的变量时局部的只在函数内部有效
5,可以记录函数调用的次数,从而在某种条件下起到终止递归
函数的参数
默认情况下,函数通过值进行传递,
如果希望允许修改函数的值,必须通过引用(&)传递参数
函数的返回值
值通过使用可选的返回语句return返回
可以返回包括数组对象的任意类型
返回语句会终止函数执行,并将控制权交个函数调用处
省略人return,返回值为null,并且不支持返回多个返回值
函数的引用返回值
从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&
外部文件的导入
incloud/require语句包含并运行指定文件
如果给出路径就安路径查找,否则就从incloud_path中查找,如果incloud_path 中也没有就会从所调用的脚本的所在目录和当前工作目录下寻找
当一个文件被包含的时候,其中所包含的代码继承了incloud的所在行的变量范围
价值过程中文找到文件,incloud会发出一条警告,require会报出致命的错误
require在出错是产生E_COMPILE_ERROR级别的错误。换句话说脚本将会终止,incloud只是发出了警告,脚本继续执行
incloud_once(require_once)/incloud(require)的唯一区别,就是PHP会检查文件是否被包含过,如果有就不在被包含
系统内置的函数
时间日期函数
date(),strtotime(),mktime(),time(),microtime().date_default_timezone_set()
IP处理函数
iptolong()、longtoip()
打印处理
print(),printf(),print_r(),echo,sprintf(),var_dump(),var_export()
序列化以及反序列化函数
serialize(),unserialize()
字符串函数
explode(),implode(),join(),strrev(),trim(),ltrim(),rtrim(),strstr(),number_format()...
数组处理函数
array_keys(),array_values(),arrdiff(),array_intersect(),array_merge(),array_shift(),array_unshigft(),array_pop(),array_push(),sort(),
6.正则表达式
/*正则表达式的作用 分割 查找 匹配 替换字符串;
*分隔符:正斜线('/'),hash符号的#,以及去反的符号~
* 通用原子:/d,十进制的0~9
* /D,取反
*
* /w,数字,字母下,划线
* /W,取反
* /s,空白符
* /S除了空白符
* 元符号:. 除了换行符的任意字符
* *匹配前面的字符出现零次,1次,或者多次
* ?0次或者一次
* ^ 必须以他开头
* $ 必须以他结尾
* + 出现一次或者多次
* {n}恰巧出现n次
* {n,}大于等于n次
* {n,m}大于n小于等于m
* [ ] 一个集合
* ()代表互相引用或者当成一个整体
* 【^】代表取反
* | 或者
* 【-】代表的是一个范围
* 模式修正符:
* i不区分大小写
* m将字符串字通过分割符进行一个分割,增添到字符串的每一行分别进行匹配
* e
* s修正点的换行
* U 取消他的模式
* x 忽略模式中的空白符
* A 必须以这种模式开头
* D 修正 $对
反斜线的忽略
* u 当我做一个utf-8的中文时 用到
* 后向引用
*
*
* 贪婪模式
*
*
*
* */
文件以及目录操作
* 文件的读取/写入操作
* fopen()函数
* 用来打开一个文件,打开时需要指定打开的方式
* 打开模式: r/r+ 用只读方式打开并且将文件指针指到文件的开头/用读写的方式打开并且将文件指针指到文件的开头
* w/w+用写入方式打开将文件指针指到文件的开头,并且将文件的大小结尾零(清空你的文件)/用读写的方式打开并且将文件指针指到文件的开头 并且将文件的大小结尾零(清空你的文件)
* w要是文件不存在就会先创建文件
* a/a+ 追加的写入方式将文件指针指到文件的末尾 /读写方式 文件不存在就会先创建文件
* x/x+ b t
* 读取函数 fread() fgets() 获取一行 fgetc()获取一个字符
* 关闭函数 fclose()
* 不需要fopen()打开的函数 file_get_contents() file_put_contents()
* 其他的读取函数 file() readfile()
* 访问远程文件 开启allow_url_fopen ,HTTP协议连接只能使用只读,FTP协议可以使用只读或者只写
* 目录相关的操作函数
* 名称相关:basename(),dirname(),pathinfo();
* 目录读取:Opendir(),reddir(),closedir(),rewinddir()
* 删除目录:rmdir() 该目录为空才能删除 否则删除不了
* 创建目录: mkdir()
* 文件大小:fileSize()进行获取
* 目录大小:disk_free_space()磁盘大小:剩余空间 disk_total_space() 总共的大小
* 文件拷贝:copy()
* 删除文件: unlink()
* 文件类型:filetype()进行获取
* 重命名文件或者目录:rename()不光可以重命名而且可以移动文件目录
* 文件的截取:ftruncate() 截取到指定的大小
* 文件的属性:file_exists()判断文件时候存在
* is_readable()是否可读
* is_writtable()是否可写
* is_executable()是否可执行
* filectime()文件的修改时间
* fileatime()文件的访问的时间
* filemtime()整个的一个修改时间
* 文件锁:flock()
* 文件指针:ftell() fseek() rewind()
*
* */
/**
* 会话技术
* cookie 是存储在客户端的文件
* setcookie($namn键,$value值,$exprie过期时间,$path路径, $domain域名,$secure安全)
* $_COOKIE
* 删除cookie
* setcookie($name,'',time()-1000);
* cookie 的优缺点
* 优点 它在客户端存在不会浪费服务器资源,效率会高一些
* 缺点 由于他在客户端存储 不建议将一些敏感的信息存储在cookie中,而且用户有权限禁止COOKIR的使用
*
*sesstion 存储在服务器 它基于cookie
* sesstion_start()开启sesstion()
* $_SEESSTION
* $_SESSTION=[]
* sesstion_destroy()删除sesstion
*
* session 优缺点
* 存于服务器中 安全 依赖于cookie 缺点占用服务器资源
* 传递sessionID session_name() 和session_id()
*
* session的存储 session_set_save_handler( )
*/
/**
* 网络协议
* HTTP协议状态码
* 五大类状态码 1XX(信息类状态码) 2XX(成功状态码) 3XX(进行附加操作完成请求) 4XX (客户端错误状态码) 5XX(服务器错误)
* 200 ok被正常处理了 204已成功处理,但是在返回的报文中不含实体的主体部分 206 部分的内容
* 301 永久性重定向 302 零时性重定向 303 存在另一个URL 304 307(302)
* 400 请求的报文中有语法错误,修改后请在一次请求,
* 401 发送请求需要有HTTP认证的认证信息 403对服务器的访问被拒绝了 404 服务器上无法找到访问的资源
* 503 服务器在进行超负载或者维护
*
* HTTP 协议的请求方法
* GET
* POST
* HEAD
* OPTIons
* PUT
* DELETE
* TRACE
*
* GET 和POST区别
* 1,在做后退和刷新的时候GET是无害的,POST数据就会被重新提交
* 2,GET可以收藏为书签 但POST不行
* 3,GET请求可以被浏览器缓存,POST不能被缓存
* 4,GET请求会对url的长度有限制2048,POST 没有
* 5,安全性 GET 没有POST安全
* 6,显现性 GET在URL可见,POST 不会显示
*HTTPS的工作原理
* https 是一种基于SSL/TLS的HTTP协议,所有的HTTP数据都是在SSL/TLS协议封装上传输的
* https 协议在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议
*
* 常见的网络协议含义以及端口
* FTP(文件传输协议,默认端口21) Telnet (用于远程登录的端口,用户可以远程链接计算机 23)
* SMTP(定义了简单邮件传输协议 发送邮件 25) POP3(主要用于接收邮件,端口110)
* HTTP(超文本传输协议 端口80)DNS(用于域名简析服务 53)
*/
*开发环境的配置
版本控制器
集中式和分布式
CVS 和SVN GIt
PHP的运行原理
CGI fastCGI 改良了CGI
PHP-FPM 进程管理器
真题 请简单叙述 CGI fastCGI h和 PHP-FPM的区别
CGI 代表为了联系PHP 和websevae 的一个桥梁
fastCGI 是CGI的改良版
PHP-FPM 进程管理器