现在的位置: 首页 > 编程语言 > 正文

PHP的生命周期是多久?PHP7与PHP5的区别有哪些

2020年01月11日 编程语言 ⁄ 共 967字 ⁄ 字号 评论关闭

  PHP 的生命周期 / 启动流程

  完整的生命周期为模块初始化、请求初始化、请求处理、请求关闭、模块关闭五大阶段。

  cli 模式下,每个脚本都会完整的执行上面的五大阶段;对于 fastcgi 模式而言,只在启动时会执行模块初始化,之后的请求都走了请求初始化、处理请求、请求关闭三大阶段,在 fastcgi 关闭时执行模块关闭阶段。各个扩展的加载也是在模块初始化阶段完成的。

  说一下 PHP 的(内存)垃圾回收机制

  每一个变量对应一个 zval 数据结构,在该结构内还有一个 val 结构体,该结构体内有一个引用计数(php7 而言,对于 php5,这个引用计数是保存在 zval 结构中的),标识该对象的引用数,当对象的引用计数为 0 时代表这个对象可被回收。

  对象的 refcount 减少的时机:修改变量、函数返回(释放局部变量)、unset 变量

  对于数组和对象而言,可能存在变量中的成员引用变量本身的情况,也就是循环引用,这样会造成这个变量永远不会被内存回收,而成为垃圾。

  PHP 里对于这种情况给出了垃圾回收机制:如果数组、对象的引用计数减少而且不为零,则认为他们可能是垃圾,把他们放到垃圾收集器里。等垃圾收集器到了一定的数量之后,进行垃圾处理:对所有可能的垃圾 refcount 减 1,如果为 1,说明是垃圾,则进行内存回收;如果不为 1,说明还有其他变量在使用,refcount 重新加 1;这种对象复用以及垃圾回收机制在其他语言中也有体现:redis 中也使用了引用计数表示每个对象的引用数量。

  PHP7 与 PHP5 的区别

  改进的性能 - 将 PHPNG 代码合并到 PHP7 中,速度是 PHP 5 的两倍。

  降低内存消耗 - 优化的 PHP 7 使用较少的资源。

  标量类型声明 - 现在可以强制执行参数和返回类型。

  一致的 64 位支持 - 对 64 位体系结构机器的一致支持。

  改进了异常层次 - 异常层次得到了改进

  许多致命的错误转换为例外 - 例外范围增加,涵盖许多致命的错误转换为例外。

  安全随机数发生器 - 增加新的安全随机数发生器 API。

  已弃用的 SAPI 和扩展已删除 - 各种旧的和不受支持的 SAPI 和扩展从最新版本中删除。

  空合并运算符(?) - 添加了新的空合并运算符。

  返回和标量类型声明 - 支持所添加的返回类型和参数类型。

  匿名类 - 支持匿名添加。

  零成本断言 - 支持零成本断言增加。

抱歉!评论已关闭.