php extending and embedding by sams 目录 译序! 6 此译本前世今生! 6 译本使用的环境! 6 php的生命周期! 7 ⼀一切都从sapi开始! 7 启动和终止! 7 生命周期! 9 Zend线程安全! 12 小结! 16 变量的里里外外! 17 数据类型! 17 数据值! 19 数据的创建! 20 数据类型/值/创建回顾练习! 21 数据存储! 23 数据取回! 24 类型转换! 24 小结! 25 内存管理! 27 内存! 27 引用计数! 31 小结! 35 安装构建环境! 36 1 php extending and embedding by sams 构建php! 36 配置用于开发的php! 37 在Unix上编译! 38 在Win32上编译! 38 小结! 38 你的第⼀一个扩展! 39 剖析扩展! 39 构建你的第⼀一个扩展! 41 静态构建! 42 功能函数! 42 小结! 44 返回值! 45 return_value变量! 45 引用方式返回值! 49 小结! 52 接受参数! 53 zend_parse_parameters()的自动类型转换! 53 参数信息和类型暗示! 58 总结! 59 在数组和哈希表上工作! 60 向量 Vs. 链表! 60 Zend Hash API! 63 zval *数组API! 75 小结! 76 2 php extending and embedding by sams 资源数据类型! 77 复杂的结构体! 77 持久化资源! 81 其他引用计数器! 89 小结! 89 php4的对象! 90 php对象类型的演化! 90 实现类! 90 使用实例工作! 93 小结! 99 php5对象! 100 进化史! 100 方法! 100 属性! 103 接口! 105 句柄! 106 小结! 110 启动, 终止, 以及其中的⼀一些点! 111 生命周期! 111 通过MINFO对外暴露模块信息! 113 常量! 114 扩展的全局空间! 116 用户空间超级全局变量! 119 小结! 120 3 php extending and embedding by sams INI设置! 121 定义并访问INI设置! 121 小结! 126 访问流! 127 流的概览! 127 打开流! 127 访问流! 131 静态资源操作! 135 小结! 135 实现流! 136 php流的表象之下! 136 包装器操作! 138 实现⼀一个包装器! 138 操纵! 148 检查! 150 小结! 151 有趣的流! 152 上下文! 152 过滤器! 155 小结! 160 配置和链接! 161 autoconf! 161 库的查找! 161 强制模块依赖! 163 4 php extending and embedding by sams Windows方言! 165 小结! 165 扩展生成! 166 ext_skel! 166 PECL_Gen! 166 小结! 170 设置宿主环境! 171 嵌入式SAPI! 171 构建并编译⼀一个宿主应用! 171 通过嵌入包装重新创建cli! 172 老技术新用! 173 小结! 175 高级嵌入式! 177 回调到php中! 177 错误处理! 179 初始化php! 180 覆写INI_SYSTEM和INI_PERDIR选项! 181 捕获输出! 183 同时扩展和嵌入! 185 小结! 186 后记! 187 5 php extending and embedding by sams 译序 本书目前在github上由laruence(http://www.laruence.com)和walu(http:// www.walu.cc)两位大牛组织翻译. 该翻译项目地址为: https://github.com/walu/phpbook 本书在github上的地址: https://github.com/goosman-lei/php-eae 未来本书将可能部分合并到phpbook项目中, 同时保留⼀一份独立版本. 原书名: <Extending and Embedding PHP> 原作者: Sara Golemon 译者: goosman.lei(雷果国) 译者Email: lgg860911@yahoo.com.cn 译者Blog: http://blog.csdn.net/lgg201 权利声明 此译本在不获利的情况下, 可以无限制自由传播. 此译本前世今生 最早是11年初看这本书, 当时C语言以及*NIX系统编程功力不足, 看到第11章左右就 停工了, 译者看英文书籍有⼀一个习惯就是按照自己的理解原文翻译记录电子笔记. 停工后译者⼀一直在补充C语言, 网络以及*NIX系统编程方面的基本功, 12年底在github 看到了本书的翻译项目, 遂准备github上的译本为辅助材料再学习⼀一遍此书, 过程中发现该 项目翻译章节有所缺失, 且叙述风格偏俏皮, 不合译者口味. 因此, 补充该项目中关于线程安全层缺失的⼀一部分后, 自己重又拿起原著阅读, 并重新 对照翻译出这份译本. 由于译者自身英语水平的问题(大学英语平均40分左右), 以及自身技术功力不足的问 题, 译本中所述内存可能与原著存在偏颇, 请读者选择阅读时, 尽量以原著为主, 以此译本 为辅. 如果读者与译者⼀一样, 在英文阅读上有困难, 可以学习译者的阅读方法: 搭建好完善的 开发环境, 从原著中不能理解的部分, 提取关键字, 通过搜索引擎分析出所述知识点(如果直 接能看出当然就不需要了), 通过自己编写代码实现并验证的方式去阅读学习. 此译本核心目的是让那些和我⼀一样英文阅读有障碍, 又想学习php模块开 发的同学, 将它作为自己啃原著时的⼀一份参考, 提高学习效率. 译本使用的环境 操作系统: Linux linux.centos 2.6.32-279.5.2.el6.x86_64 #1 SMP Fri Aug 24 01:07:11 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux php源代码版本: php-5.4.9 php源代码编译参数: './configure' '--disable-all' '--prefix=/usr/local/php-dev' '--enable-embed' '--enable-debug' '--enable-maintainer-zts' '--enable-fpm' '--with-readline' '--enable-sockets' '--with-pear' '-enable-xml' '--enable-libxml' '--enable-tokenizer' php编译安装后的版本信息: PHP 5.4.9 (cli) (built: Dec 25 2012 15:12:52) (DEBUG) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies 6 php extending and embedding by sams php的生命周期 在常见的webserver环境中, 你不能直接启动php解释器; ⼀一般是启动apache或其他 webserver, 由它们加载php处理需要处理的脚本(请求的.php文档). ⼀一切都从sapi开始 尽管看起来有所不同, 但实际上CLI的行为和web方式⼀一致. 在命令行中键入php命令 将启动"命令行sapi", 它实际上就像⼀一个设计用于服务单请求的迷你版webserver. 当脚本 运行完成后, 这个迷你的php-webserver终止并返回控制给shell. 启动和终止 这里的启动和终止过程分为两个独立的启动阶段和两个独立的终止阶段. ⼀一个周期用 于php解释器整体执行所需结构和值的初始化设置, 它们在sapi生命周期中持久存在. 另⼀一 个则仅服务于单页面请求, 生命周期短暂⼀一些. 初始化启动在所有的请求发生之前, php调用每个扩展的MINIT(模块初始化)方法. 这 里, 扩展可能会定义常量, 定义类, 注册资源, 流, 过滤处理器等所有将要被请求脚本所使用 的资源. 所有这些都有⼀一个特性, 就是它们被设计跨所有请求存在, 也可以称为"持久". 常见的MINIT方法如下: /* 初始化myextension模块 * 这在sapi启动后将立即发生 */ PHP_MINIT_FUNCTION(myextension) { /* 全局: 第12章 */ #ifdef ZTS ts_allocate_id(&myextension_globals_id, sizeof(php_myextension_globals), (ts_allocate_ctor) myextension_globals_ctor, (ts_allocate_dtor) myextension_globals_dtor); #else myextension_globals_ctor(&myextension_globals TSRMLS_CC); #endif /* REGISTER_INI_ENTRIES() 指向⼀一个全局的结构, 我们将在第13章"INI设置"中学习 */ REGISTER_INI_ENTRIES(); /* 等价于define('MYEXT_MEANING', 42); */ REGISTER_LONG_CONSTANT("MYEXT_MEANING", 42, CONST_CS | CONST_PERSISTENT); /* 等价于define('MYEXT_FOO', 'bar'); */ REGISTER_STRING_CONSTANT("MYEXT_FOO", "bar", CONST_CS | CONST_PERSISTENT);

pdf文档 php 源码解析

教育频道 > > > 文档预览
187 页 2 下载 932 浏览 0 评论 0 收藏 3.0分
温馨提示:当前文档最多只能预览 1 页,若文档总页数超出了 1 页,请下载原文档以浏览全部内容。
本文档由 南大文库人2020-03-03 13:35:59上传分享
给文档打分
您好可以输入 255 个字符
南大文库的中文名?( 答案:南大文库 )
评论列表
  • 暂时还没有评论,期待您的金玉良言
最新文档