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 相比,安全性较高,,可应用于数据修改。

请求方法还包括: OPTIONHEADDELETEPUT

7. 语句 include 和 require 的区别是什么?

语雀内容

8. PHP 的基本变量类型

语雀内容

9. 双引号和单引号

单引号 对于内部的变量不会解析,只能解析部分特殊符号,所以解析速度快。
双引号 对于内部的变量会进行解析,可以解析所有特殊符号,所以解析速度比 单引号 慢。

10. PHP7 的新特性

性能提升

  1. 变量存储字节减小,减少内存占用,提升变量操作速度。
  2. 改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 CPU 缓存命中率。
  3. 改进了函数的调用机制,通过优化参数传递的环境,减少了一些资料,提高了执行效率。

三元运算符 NULL 判断赋值优化

  1. $sit = null;
  2. $str = $sit ?? 'wow';
  3. 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