文章分类 - 语言-PHP
摘要:第一个参数是HashTable,在1.2.3节提到Zend使用HashTable来存储PHP函数,function_table用于指定从哪 个HashTable中获取函数。通常应该用CG(function_table),展开就是 compiler_globals.function_table,compiler_globals是一个用来存储编译器数据的全局数据结构(与其对应 的还有个EG宏,即executor_globals,它用来存储执行器数据)。compiler_globals.function_table里面存 储了所有我们可以在PHP页面里面调用的函数,包括Zend内建函数、PHP标准库
阅读全文
摘要:Extensions 的编写理解了这些运行机制以后,本章着手介绍Extensions 的编写,但凡写程序的人都知道hello world,那好,就从hello world开始。1.1Hello World这是摘自《PHP手册》的示例程序:/* include standard header */#include "php.h" /* declaration of functions to be exported */ZEND_FUNCTION(first_module); /* compiled function list so Zend knows what's
阅读全文
摘要:1.1 使用数组曾讲到,PHP数组本质上就是个HashTable,因此访问数组就是对HashTable进行操作,Zend为我们提供的一组数组函数也只是对HashTable操作进行了简单包装而已。来看创建数组,由于数组也是存在于zval里的,因此要先用MAKE_STD_ZVAL()宏创建一个zval,之后调用如下宏将其转化为一个空数组:array_init(zval*)接下来是朝数组中添加元素,这对关联数组元素和非关联数组元素要采用不同操作。1.1.1 关联数组元素关联数组采用char*作为key,zval*作为value,可以使用如下宏将已有的zval加入数组或者更新已有元素:int ad..
阅读全文
摘要:类和对象(TODO)附录A. Extension的编译Extension的编译是比较简单的,下面是个示例Makefile:# 扩展搜索目录,模块被放到这里才能被找到和加载 # 可以从php.ini中的extension_dir命令获取该值 PHP_EXT_HOME=/home/wiki/php5/lib/php/extensions/ # PHP源代码路径 PHP_SRC=/home/wiki/wikienv/install/php-5.2.3 INCLUDE=-I$(PHP_SRC) -I$(PHP_SRC)/main -I$(PHP_SRC)/TSRM -I$(PHP_SRC)/Ze...
阅读全文
摘要:一、 基础知识本章简要介绍一些Zend引擎的内部机制,这些知识和Extensions密切相关,同时也可以帮助我们写出更加高效的PHP代码。1.1 PHP变量的存储1.1.1 zval结构Zend使用zval结构来存储PHP变量的值,该结构如下所示:typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; ...
阅读全文
摘要:作为一门动态语言,php是如何实现的,其底层机制如何,具有什么样的特点,本文深入浅出介绍了包括php设计理念、整体结构、核心数据结构和变量在内的相关底层知识,对我们更好的开发php程序,优化性能等有一定的指导意义。TAGPhp 底层机制 性能优化目录1、概述… 1what is php?. 1了解它底层实现的目的?. 12、php的设计理念及特点… 13、Php的四层体系… 24、Sapi 35、Php的执行流程&opcode. 56、HashTable — 核心数据结构… 67、Php变量… 8概述… 8Zval 9整数、浮点数类型变量… 10字符串变量… 10
阅读全文
摘要:永久登录指的是在浏览器会话间进行持续验证的机制。换句话说,今天已登录的用户明天依然是处于登录状态,即使在多次访问之间的用户会话过期的情况下也是这样。永久登录的存在降低了你的验证机制的安全性,但它增加了可用性。不是在用户每次访问时麻烦用户进行身份验证,而是提供了记住登录的选择。据我观察,最常见的有缺陷的永久登录方案是将用户名和密码保存在一个cookie中。这样做的诱惑是可以理解的——不需要提示用户输入用户名和密码,你只要简单地从cookie中读取它们即可。验证过程的其它部分与正常登录完全相同,因此该方案是一个简单的方案。不过如果你确实是把用户名和密码存在cookie中的话,请立刻关闭该功能,同时
阅读全文
摘要:写在前面:最近一直在翻译《PHP 手册》中的《Zend API-深入 PHP 内核》一章,不过翻译终究是别人的东西,有些看法、做法即使和原作者不大相同那也得照翻。当然不能说自己所想的就是对的、好的,但的确有时是有很多疑问和 想法,若是直接在译文中加入自己的看法恐怕不太合适,所以一直在找机会自己写一些这方面文章,以供以后回顾总结时的参考。这时恰逢 《PHP&MORE》杂志抬爱,想邀稿在第七期或以后发表一些这类的文章,于是欣然应允。这篇文章是属于入门型的,本是想给进行 PHP 扩展开发的朋友一些大致的参考,以便倒时不致于找不到下手的方向。但写着写着就感觉有点把握不住了。因为我是一个好奇心很
阅读全文
摘要:什么是扩展? 每个PHP程序员必接触过扩展,PECL库提供超过100多个扩展,比较常用的memcache,apc,mysqli等。在php.ini文件中,extension_dir指示就是扩展路径。为什么要扩展?PHP的设计理念,开源语言,方便各个社区自行开发丰富的功能,互不影响,而且与PHP内部无耦合。有些功能脚本语言无法实现或者实现代价较高,比如常驻内存的应用,以及算法复杂度较高的已有C程序,又不想用PHP重写。出于效率的考虑。扩展由于实际上执行的是C程序,因此提高效率。扩展如何执行? PHP语言本身的结构分成两大部分:ZEND和PHPcore。 zend可以比喻成车的引擎,负责php代码
阅读全文
浙公网安备 33010602011771号