[ PHP 内核与扩展开发系列] 内存管理 —— 引用计数

对于 PHP 这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错。另一方面,除了要安全申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要的相同数据的复制则应该能免则免。我们来看下面这段 PHP 代码: <?php $a = ‘Hello Wo…

[ PHP 内核与扩展开发系列] 内存管理 —— 内存分配与释放

在 PHP 里,我们可以定义字符串变量,比如 <?php $str=”hello”;?>,$str 这个字符串变量可以被自由的修改与复制。这一切在 C 语言里看起来都是不可能的事情,我们用 char *p = “hello”; 来定义一个字符串,但它是常量,是不能被修改的,如果你用 p[1]=’c’; 来修改这个字符串会引发段错误,为了修改 C 语言里的字符串常量,我们往往需…

[ PHP 内核与扩展开发系列] 变量在内核中的实现 —— 类型转化

现在我们已经可以从符号表中获取用户在 PHP 语言里定义的变量了,是时候该做点其它事情了,举个例子,比如给它来个类型转换。想想 C 语言中的类型转换细则,你的头是不是已经大了?但是变量的类型转换就是如此重要,如果没有,那我们的代码就会是下面这样了: void display_zval(zval *value) { switch (Z_TYPE_P(value)) { case IS_NU…

[ PHP 内核与扩展开发系列] 变量在内核中的实现 —— PHP 变量的创建、存储和检索

创建变量 我们已经知道 PHP 变量在内核中其实是通过 zval 结构来实现的,也初步了解如何设置一个 zval 结构的类型和值。这一节我们将在前两节的基础上,彻底掌握对 zval 结构的操控,期间将引入很多超棒的新宏。 在编码的时候,很希望在内核中创建的 zval 可以让用户在 PHP 语言里以变量的形式使用,为了实现这个功能,我们首先要创建一个 zval。最容易想到的办法便是创建一个…

[ PHP 内核与扩展开发系列] 变量在内核中的实现 —— 变量的值

PHP 内核提供了三个基础宏来方便我们对变量的值进行操作,这几个宏同样以 Z_ 开头,并且 P 结尾和PP 结尾的同上一节中的宏一样,分别代表这参数是指针还是指针的指针。 基本类型 此外,为了进一步方便我们的工作,内核中针对具体的数据类型分别定义了相应的宏。如针对 IS_BOOL 型的 BVAL 组合(Z_BVAL、Z_BVAL_P、Z_BVAL_PP)和针对 IS_DOUBLE 的 D…

[ PHP 内核与扩展开发系列] 变量在内核中的实现 —— 变量类型

所有的编程语言都要提供一种数据的存储与检索机制,PHP 也不例外。其它语言大都需要在使用变量之前先定义,并且它的类型也是无法再次改变的(强类型静态语言,先声明,再使用,运行时无法改变类型),而 PHP 是弱类型动态语言,允许程序员自由使用变量而无需提前定义,甚至可以随时随意地将已存在的变量转换成其它任何 PHP 支持的数据类型。在程序运行的时候,PHP 还会自动根据需求转换变量的类型。 …

[ PHP 内核与扩展开发系列] PHP 生命周期 —— 启动、终止与模式

启动与终止 PHP程序的启动可以看作有两个概念上的启动,终止也有两个概念上的终止。 其中一个是 PHP 作为Apache(拿它举例,板砖勿扔)的一个模块的启动与终止, 这次启动 PHP 会初始化一些必要数据,比如与宿主 Apache 有关的,并且这些数据是常驻内存的,终止与之相对。还有一个概念上的启动就是当 Apache 分配一个页面请求过来的时候,PHP会有一次启动与终止,这也是我们最…

[ PHP 内核与扩展开发系列] PHP 生命周期 —— 从 SAPI 开始

声明:本系列文章整理自GitHub项目PHP扩展开发及内核应用,并根据PHP最新代码对其进行适当调整和校对。适用于有 C 语言基础的高级 PHPer。 在基于 Apache 的 Web 环境中,我们并不需要单独启动 PHP 服务,它会作为一个模块自动加载到 Web 服务器里面去,只要我们启动了 Apache,被一起加载的 PHP 模块便会和服务器一起解析被请求的 PHP 脚本。 不过,当…

[ Laravel 5.4 文档 ] 官方包 —— Laravel Scout

1、简介 Laravel Scout 为 Eloquent 模型全文搜索实现提供了简单的、基于驱动的解决方案,通过使用模型观察者,Scout 会自动同步更新模型记录的索引。 目前,Scout 通过 Algolia 驱动提供搜索功能,不过,编写自定义驱动很简单,你可以很轻松地通过自己的搜索实现来扩展 Scout。 2、安装 首先,我们通过 Composer 包管理器来安装 Scout: c…

基于Laravel 5.4 开发的博客系统 —— MyPersimmon

1、概述 本项目使用 PHP 框架 Laravel 5.4 进行开发。 项目依赖了部分云服务,如图片使用了七牛云储存。(目前必须,暂时没有加入本地存储图片的功能) 文章别名自动生成,使用了百度翻译功能。(必须) 接入了 baidu ping 服务,当发布文章的时候,自动向百度搜索引擎提交地址。(可以不使用) 系统后台使用了Vuejs + Element-UI实现前后端分离 2、功能特性 …