PHP 的垃圾回收机制 软件开发中的垃圾回收机制是一种自动打扫和清除内存垃圾技术,它可以有效防范动态内存分配中可能发生的危险: 因内容垃圾过多而引发的内存耗尽。 不恰当的内存释放所造成的内存非法引用。 在PHP5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection) ,引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不是放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况,引擎将无法回收这些内存,于是在php5.3 中出现了新的GC,新的GC有专门的机制负责清理垃圾数据,防止内存泄漏[1]。 PHP7 中复杂类型的引用计数都维护在各个结构体头部的GC 中,那么GC 的作用是什么?[2]。
对垃圾回收的支持
PHP 基本概念 PHP 是一种嵌入式脚本语言,它基于Zend 引擎。 PHP 数据类型可以分为三种: 标量数据类型: 布尔型、字符串、整数、浮点。 (Integer、Float、String或Boolean) 记忆口诀:如果(if) sb,就是“标 ”。 可以通过is_scalar()函数判断一个变量是否为标量,如果一个变量通过is_scalar()函数判断得到值为1,那么说明该变量是标量;如果输出为空,那么说明该变量不是标量。 复合数据类型: 数组、对象 特殊数据类型: 资源类型、NULL 一个标量数据只能存放一个数据,而复合数据可以存放多个数据。
PHP 版本差别 5.2 以前的版本:autoload、PDO和mysqli ,类型约束、Json支持 5.3 新增匿名函数、魔术方法、命名空间、后期静态绑定、heredoc、const、三元运算符等。 5.4 新增ShortOpenTag、数组简写形式、Traits、内置Web服务器。 5.5 新增yield、list()用户foreach。 5.6 新增常量增强、可变函数参数、命名空间增强。 7.0 新增空合并运算符、变量类型声明、返回值类型声明、太空船操作符、匿名类、Unicode codepoint 转译语法、Closure::call()、为unserialize() 提供过滤、IntIChar、预期、Group use declarations 等新特性。 7.1 版本 新增可控类型、list的方括号简写、循序在list中指定key、void返回类型、类常量属性设定、多条件catch等新特性。
PHP 如何安装拓展 windows 上两种方式 把拓展编译进PHP 加载DLL文件
一段脚本如何裁断彻底终止 当执行到文件结尾时。
define和const的区别 const可在类中使用, 用于类成员常量定义(在php5.3.0以后,可以使用const关键字在类定义的外部定义常量),定义后不可修改, const在类内定义常量,那么const必须通过类名::变量名来进行访问; define不能在类中使用,可用于全局变量 在实际开发过程中,常量主要用于值被定义后就不能被修改或覆盖的地方。具体而言,主要用于以下几个地方: 1)操作连接数据库的信息定义成常量,例如连接数据库时数据库的用户名、密码、数据库名、主机名等。 2)将站点的相同路径部分定义成常量,例如Web绝对路径,smarty的安装路径,model、view或者controller的文件夹路径。 3)网站的公共信息定义成常量,例如网站名称、网站关键词、网站描述、网站作者等信息。 FILE 返回的是绝对路径,如果这个魔术常量所在的文件被其他文件引用,那么扔人会返回原文件路径,而不是其他文件的路径。获取类的方法用魔术变量__METHOD__,获取类的名称用魔术变量__CLASS__ isset 、empty 和is_null 的区别 图片 总结一下,就是empty 遇到空的和假的,都判断为TURE。 is_null 和isset 对偶,功能上相似,但是isset是语句,is_null是函数,isset 检测速度更快,并且不会出notice提醒。
PHP 抽象类和接口的区别 1.对接口的继承使用implements,抽象类使用extends.
2.接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量
3.接口没有构造函数,抽象类可以有
4.接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰
5.一个类可以继承多个接口,但只能继承一个抽象类
参考书籍:
[1] PHP 求职宝典
[2] PHP 底层设计与源码实现
|