Welcome 微信登录

首页 / 网页编程 / PHP / php4的对象详解

php4的对象详解2013-09-08php4的对象

曾几何时, 在很早的版本中, php还不支持任何的面向对象编程语法. 在php4中引入了Zend引擎(ZE1), 出现了几个新的特性, 其中就包括对象数据类型.

php对象类型的演化

第一次的面向对象编程(OOP)支持仅实现了对象关联的语义. 用一个php内核开发者的话来说就是"php4的对象只是将一个数组和一些方法绑定到了一起". 它就是现在你要研究的php对象.

Zend引擎(ZE2)的第二个大版本发布是在php5中, 在php的OOP实现中引入了一些新的特性. 例如, 属性和方法可以使用访问修饰符标记它们在你的类定义外面的可见性, 函数的重载可以用来定义内部语言结构的自定义行为, 在多个类的调用链之间可以使用接口实施API标准化. 在你学习到第11章"php5对象"时, 你将通过在php5的类定义中实现这些特性来建立对这些知识的认知.

实现类

在进入OOP的世界之前, 我们需要轻装上阵. 因此, 请将你的扩展恢复到第5章"你的第一个扩展"中刚刚搭建好的骨架形态.

为了和你原有的习作独立, 你可以将这个版本命名为sample2. 将下面的三个文件放入到你php源代码的ext/sample2目录下:

config.m4

PHP_ARG_ENABLE(sample2,[Whether to enable the "sample2" extension],[enable-sample2 Enable "sample2" extension support])if test $PHP_SAMPLE2 != "no"; thenPHP_SUBST(SAMPLE2_SHARED_LIBADD)PHP_NEW_EXTENSION(sample2, sample2.c, $ext_shared)fi
php_saple2.h

#ifndef PHP_SAMPLE2_H/* Prevent double inclusion */#define PHP_SAMPLE2_H/* Define Extension Properties */#define PHP_SAMPLE2_EXTNAME"sample2"#define PHP_SAMPLE2_EXTVER"1.0"/* Import configure optionswhen building outside ofthe PHP source tree */#ifdef HAVE_CONFIG_H#include "config.h"#endif/* Include PHP Standard Header */#include "php.h"/* Define the entry point symbol* Zend will use when loading this module*/extern zend_module_entry sample2_module_entry;#define phpext_sample2_ptr &sample2_module_entry#endif /* PHP_SAMPLE2_H */
sample2.c

#include "php_sample2.h"static function_entry php_sample2_functions[] = {{ NULL, NULL, NULL }};PHP_MINIT_FUNCTION(sample2){return SUCCESS;}zend_module_entry sample2_module_entry = {#if ZEND_MODULE_API_NO >= 20010901STANDARD_MODULE_HEADER,#endifPHP_SAMPLE2_EXTNAME,php_sample2_functions,PHP_MINIT(sample2),NULL, /* MSHUTDOWN */NULL, /* RINIT */NULL, /* RSHUTDOWN */NULL, /* MINFO */#if ZEND_MODULE_API_NO >= 20010901PHP_SAMPLE2_EXTVER,#endifSTANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_SAMPLE2ZEND_GET_MODULE(sample2)#endif
现在, 就像在第5章时一样, 你可以执行phpize, ./configure, make去构建你的sample2.so扩展模块.

你之前的config.w32做与这里给出的config.m4一样的修改也可以正常工作.