如何编写PHP扩展
简 介
PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩展。
扩展API的引入使PHP3取得了巨大的进展,扩展API机制使PHP开发社区很容易的开发出几十种扩展。现在,两个版本过去了,API仍然和PHP3时的非常相似。扩展主要的思想是:尽可能的从扩展编写者那里隐藏PHP的内部机制和脚本引擎本身,仅仅需要开发者熟悉API。
有两个理由需要自己编写PHP扩展。第一个理由是:PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库,以便提供PHP接口。例如,如果一个叫FooBase的数据库已推出市场,你需要建立一个PHP扩展帮助你从PHP里调用FooBase的C函数库。这个工作可能仅由一个人完成,然后被整个PHP社区共享(如果你愿意的话)。第二个不是很普遍的理由是:你需要从性能或功能的原因考虑来编写一些商业逻辑。
如果以上的两个理由都和你没什么关系,同时你感觉自己没有冒险精神,那么你可以跳过本章。
本章教你如何编写相对简单的PHP扩展,使用一部分扩展API函数。对于大多数打算开发自定义PHP扩展开发者而言,它含概了足够的资料。学习一门编程课程的最好方法之一就是动手做一些极其简单的例子,这些例子正是本章的线索。一旦你明白了基础的东西,你就可以在互联网上通过阅读文挡、原代码或参加邮件列表新闻组讨论来丰富自己。因此,本章集中在让你如何开始的话题。在UNIX下一个叫ext_skel的脚本被用于建立扩展的骨架,骨架信息从一个描述扩展接口的定义文件中取得。因此你需要利用UNIX来建立一个骨架。Windows开发者可以使用Windows ext_skel_win32.php代替ext_skel。
然而,本章关于用你开发的扩展编译PHP的指导仅涉及UNIX编译系统。本章中所有的对API的解释与UNIX和Windows下开发的扩展都有联系。
当你阅读完这章,你能学会如何
☞ 建立一个简单的商业逻辑扩展。
☞ .建议个C函数库的包裹扩展,尤其是有些标准C文件操作函数比如fopen()
快速开始
本节没有介绍关于脚本引擎基本构造的一些知识,而是直接进入扩展的编码讲解中,因此不要担心你无法立刻获得对扩展整体把握的感觉。假设你正在开发一个网站,需要一个把字符串重复n次的函数。下面是用PHP写的例子:
function self_concat($string, $n)
{
$result = "";
for ($i = 0; $i < $n; $i++) {
$result .=
相关文档:
PHP运行过程
简单点的
浏览器 -> web服务器 -> php解释器 -> mysql服务器 -> php解释器 -> web服务器 -> 浏览器
大家握几个手
复杂点的 浏览器 -----------------------------> web服务器-> php解释器 -> mysql服务器 ….
PHP运行机制
2009-10-20 ......
<?php
function checkMobile($str)
{
$pattern = "/^(13|15)\d{9}$/";
if (preg_match($pattern,$str))
{
Return true;
}
else
{
Return false;
}
}
$str = checkMobile("15800000001");
......
各大网络编程语言的10年奋战,各有所长、各领千秋。今日对于我们的网站编程语言:ASP、JSP、PHP、ASP.NET进行实际应用统计:
ASP:50%
JSP:10%
PHP:20%
ASP.NET:20%
根据以上统计来做一下讨论。ASP技术如今天可以说已成为过去,但仍占市场的50%,因为当时ASP技术的兴起,对大部分编程 ......
class_exists — 判定一个类是否已经被定义
get_class_methods — 获取某个类中所有方法的名称
get_class_vars — 获取一个类中所有的特性
get_class — 返回一个方法所在的类名
get_declared_classes — 显示已定义的类的信息
get_declared_interfaces — 显示已定义的接口的信息
get ......
可以将数组和对象直接存入数据库中的某一字段。
使serialize()是将数组反序列化再存入数据库,序列化话完的数据就是一个字符串。
提取的时候,用unserialize()反序列化取,取出来的还是个数组。
$arr = array('value1','value2','value3');
$str = serialize($arr); //序列化
$new_str = unserialize($temp); //反序列 ......