1. PHP 的设计模式有哪些?
单例模式 、 工厂模式 、 适配器模式 、 注册数模式 、 观察模式
2. PHP 的垃圾回收机制
暂时不明白
3. HTTP 状态码
200 :请求正常
3xx :重定向
4xx :客户端请求错误;400 服务器不理解的请求;404 未找到请求的页面。
5xx :服务器错误;500 服务器内部错误;503 服务器暂时不可用;504 服务器请求超时。
4. 请说明 PHP 中传值和传引用的区别,什么时候传值什么时候传引用
函数参数,若使用 传值 则首先需要赋值一个值进行入参,而且在函数内的所有修改在函数外都无效;而 引用 则是对入参的这个内容进行传递,不需要创建新内存进行复制,并且函数内的修改在函数外也有效。
在针对大字符串或变量时,为避免创建新的临时变量消耗内存,推荐使用引用,一般情况下使用传值。
5. Session 和 Cookie 的区别是什么?
Session 存储于服务器,Cookie 存储于客户端;
Session 比较安全,Cookie 可以修改,不安全;
Session 依赖于 Cookie 进行传递,禁用 Cookie 后,Session不可使用,需要通过其他方式来传递 SessionID
Cookie 禁用后,可以通过 GET 传参的方式将 SessionID 传到要实现 Session 共享的页面,读取 SessionID ,从而获取 Session 中的数据 。
6. 表单中 GET 和 POST 提交方式的区别?
GET 提交,内容较少,提交内容拼接在 访问地址 上,安全性较低,只应用于数据取回,不应于数据修改
POST 提交,可提交内存较长,和 GET 相比,安全性较高,,可应用于数据修改。
请求方法还包括: OPTION 、 HEAD 、 DELETE 、 PUT
7. 语句 include 和 require 的区别是什么?
8. PHP 的基本变量类型
9. 双引号和单引号
单引号 对于内部的变量不会解析,只能解析部分特殊符号,所以解析速度快。
双引号 对于内部的变量会进行解析,可以解析所有特殊符号,所以解析速度比 单引号 慢。
10. PHP7 的新特性
性能提升
- 变量存储字节减小,减少内存占用,提升变量操作速度。
- 改善数组结构,数组元素和
hash
映射表被分配在同一块内存里,降低了内存占用、提升了 CPU 缓存命中率。 - 改进了函数的调用机制,通过优化参数传递的环境,减少了一些资料,提高了执行效率。
三元运算符 NULL 判断赋值优化
$sit = null;
$str = $sit ?? 'wow';
print($str); //wow
还有一些变化,匿名类、常量数组、use 以及 session 定义数组的变化。
11. PHP 支持多继承吗?如果不支持如果实现多继承
不支持,PHP中只允许单继承,父类可以被一个子类用关键字 extends
继承
可以使用 interface
或者 trait
进行实现interface
的类不能实例化,内部不能有方法体。trait
类不能实例化,有 use
引入,会覆盖当前类中的相同方法以及属性,对个 use
存在则最下的覆盖最上面的方法及属性。
12. 常见的 PHP 安全性攻击
SQL注入 :无效或者错误的 SQL 语句操作额外的消耗资源,措施,保证进入 SQL 的语句都是正确的,需要在代码处进行字段判断和筛选。
CSRF :跨站点请求伪造,是指一个页面发出的请求,看起来就像是网站的信任用户,但是是伪造的。防止:一般来说,确保用户来自你的表单,并且匹配每一个你发送的表单,有两单一定要记住,对用户会话采用适当的安全措施,例如给每一个会话更新ID和用户使用SSL。生成一个一次性的令牌并将其嵌入到表单,保存在会话中,在提交时检查它,如 laravel 中的 _token