php函数实现原理及性能分析

php函数实现原理及性能分析

ID:27571398

大小:394.45 KB

页数:12页

时间:2018-12-03

php函数实现原理及性能分析_第1页
php函数实现原理及性能分析_第2页
php函数实现原理及性能分析_第3页
php函数实现原理及性能分析_第4页
php函数实现原理及性能分析_第5页
资源描述:

《php函数实现原理及性能分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、PHP函数的实现原理及性能分析目录1.ntrW12.Php函数的分类13.Php函数的实现13.1内置函数33.2用户函数43.3勧法44.t娜批55.伪函数及其性能86.常用的php函数实现介绍97.总结及建议111.前言在任何语言中,函数都是最基本的组成单元。对于php的函数,它具有哪些特点?函数调用是怎么实现的?php函数的性能如何,有什么使用建议?本文将从原理出发进行分析结合实际的性能测试尝试对这些问题进行冋答,在了解实现的同时更好的编写php程序。同吋也会对一些常见的php函数进行介绍。2.Php函

2、数的分类在php中,横向划分的话,函数分为两大类:userfunction(内置函数)和internalfunction(内置函数)。前者就是用户在程序巾自定义的一些函数和方法,后者则是php本身提供的各类库函数(比如sprintf、array_push等)。用户也可以通过扩展的方法来编写库函数,这个将在后而介绍。对于userfunction,又可以细分为function(函数)和method(类方法),本文中将就这三种函数分别进行分析和测试。3.Php函数的实现一个php函数最终是如何执行,这个流程是怎么样

3、的呢?要冋答这个问题,我们先来看看php代码的执行所经过的流程。JF始图孓1php代码的执行过程从阁1可以看到,php实现了一个典型的动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。Php本身是用c实现的,因此最终调用的也都是c的函数,实际上,我们可以把php看做是一个c开发的软件。通过上面描述不难看出,php中阑数的执行也是被翻译成了opcodes来调用,每次闲数调用实际上是执行了一条或多条指令。对于

4、每一个函数,zend都通过以下的数据结构来描述typedefunion_zend_function{zend_uchartype;/*MUSTbethefirstelementofthisstruct!struct{zend_uchartype;/*neverused*/char*function_name;zend_class_entry*scope;zend_uintfn_flags;union_zend_function*prototype;zend_uintnum_args;zend_uintrequ

5、ired_num_args;zend_arg_info*arg_info;zend_boolpass_rest_by_reference;unsignedcharreturn_reference;}common;zend_op_arrayop_array;zendinternalfunctioninternalfunction;}zend_function;typedefstruct_zend_function_state{HashTable*function_symbol_table;zend_functi

6、on*function;void*reserved[ZEND_MAX_RESERVED_RESOURCES];}zend_function_state;其中type标明了函数的类型:用户函数、内置函数、重载函数。Common中包含函数的基本信息,包括函数名,参数信息,函数标志(普通函数、静态方法、抽象方法)等内容。另外,对于用户函数,还有一个函数符号表,记录了内部变量等,这个将在后面详述。Zend维护了一个企局function_table,这是一个大的hahs表。阑数调用的时候会首先根据函数名从表屮找到对应的

7、zencLfunction。当进行函数调用时候,虚拟机会根据type的不同决定调用方法,不同类型的函数,其执行原理是不相同的。内置函数,其本质上就是真正的c函数,每一个内置函数,php在最终编译后都会展开成为一个名叫zif_xxxx的function,比如我们常见的sprintf,对应到底层就是zif_sprintf。Zend在执行的时候,如果发现是内罝函数,则只是简单的做一个转发操作。Zend提供了一系列的api供调用,包括参数获取、数组操作、内存分配等。内置函数的参数获取,通过zend_parse_par

8、ameters方法来实现,对于数纟11、字符串等参数,zend实现的是浅拷W,因此这个效率是很高的。可以这样说,对于php内置函数,其效率和相应c函数几乎相同,唯一多了一次转发调用。内置函数在php中都是通过so的方式进行动态加载,用户也W以根据需要自己编写相应的so,也就是我们常说的扩展。ZEND提供了一系列的api供扩展使用3.2用户函和内置函数相比,川户通过php实现的自定义函数具有完全不同的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。