
PHP内核
平也
公众号:pingyeaa
展开
-
跟厂长学PHP内核7(六):变量之zval
记得网上流传甚广的段子“PHP是世界上最好的语言”,暂且不去讨论是否言过其实,但至少PHP确实有独特优势的,比如它的弱类型,即只需要$符号即可声明变量,使得PHP入手门槛极低,成为大家所青睐的Web服务端语言。那么它的变量是如何实现的呢?我们今天就来学习一下PHP的基本变量。一、引言PHP的变量存储在zval结构体中,在执行阶段中编译为op_array时就能看到zval的身影。...原创 2018-09-11 12:43:05 · 277 阅读 · 0 评论 -
跟厂长学PHP7内核(一):发展史
PHP11994年,一位名叫Rasmus lerdorf的兄台为了在网上展示自己的履历和网页流量的统计,用Perl开发了一套脚本,后来因与日俱增的需求无法得到满足,lerdorf便使用c语言进行了重写,重写后的程序支持数据库的访问,以及web应用程序的简单开发,备受好评,随后便以Personal Home Page Tools为名发布了第一个版本。PHP2为了PHP的改...原创 2018-09-06 20:44:10 · 482 阅读 · 0 评论 -
跟厂长学PHP7内核(二):源码分析的环境与工具
本文主要介绍分析源码的方式,其中包含环境的搭建、分析工具的安装以及源码调试的基本操作。一、工具清单PHP7.0.12GDBCLion二、源码下载及安装$ wget http://php.net/distributions/php-7.0.12.tar.gz$ tar zxvf php-7.0.12.tar.gz$ cd php-7.0.12/$ ....原创 2018-09-06 20:45:42 · 655 阅读 · 0 评论 -
跟厂长学PHP7内核(三):源码目录结构
上篇文章我们已经介绍了源码分析工具的安装、配置以及调试方法,本文我们来讲述一下PHP源码的目录结构。一、目录概览以php-7.0.12为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目录的说明。 目录 说明 TSRM 线程相关安全的实现 Zend PHP解析器的核心实现 build linux下编译相关的目录...原创 2018-09-06 20:46:35 · 513 阅读 · 0 评论 -
跟厂长学PHP7内核(四):生命周期之开始前的躁动
上一章我们对PHP的源码目录结构有了初步了解,本章我们继续从生命周期的维度对PHP进行剖析。一、概览生命周期是什么呢?你可以把它看作执行过程,PHP的生命周期也就是它从开始执行到结束执行的过程。PHP生命周期有五个阶段,分别为模块初始化阶段、请求初始化阶段、执行阶段、请求关闭阶段、模块关闭阶段。只是不同SAPI模式下,请求的情况略有不同,比如FastCGI下只经历了一次模块...原创 2018-09-06 20:47:14 · 247 阅读 · 0 评论 -
跟厂长学PHP7内核(五):系统分析生命周期
上篇文章讲述了模块初始化阶段之前的准备工作,本篇我来详细介绍PHP生命周期的五个阶段。一、模块初始化阶段我们先来看一下该阶段的每个函数的作用。1.1、sapi_initialize_request_empty函数// main/SAPI.cSAPI_API void sapi_initialize_empty_request(void){ SG(...原创 2018-09-06 20:47:55 · 238 阅读 · 0 评论 -
跟厂长学PHP7内核(七):常见变量类型的基本结构
上篇文章讲述了变量的存储结构zval,今天我们就来学习一下几个常见变量类型的基本结构。一、类型一览zval中的u1.v.type用来存储变量的类型,而zval.value存储的是不同类型对应的值,所以type决定value取值的地方,以下是PHP7所定义的所有类型。#define IS_UNDEF 0 /* 标记未使用类型 */#define IS_NULL 1 /* N...原创 2018-09-19 12:17:56 · 466 阅读 · 0 评论 -
跟厂长学PHP7内核(八):深入理解字符串的实现
在前面大致预览了常用变量的结构之后,我们今天来仔细的剖析一下字符串的具体实现。一、字符串的结构struct _zend_string { zend_refcounted_h gc; /* 字符串类别及引用计数 */ zend_ulong h; /* 字符串的哈希值 */ size_t len; /* 字符串的长度...原创 2018-09-21 20:08:15 · 414 阅读 · 0 评论