首页 >后端开发 >php教程 >php自定义函数的工作原理和结构化编程介绍

php自定义函数的工作原理和结构化编程介绍

伊谢尔伦
伊谢尔伦原创
2017-05-05 12:01:002324浏览

当且仅当函数被调用以后,函数中的代码语句才会被执行,其目的是为了完成一些特定的任务。而函数被执行完成以后,控制权将返回到调用函数的地方,函数就能够以返回值的方式将信息返回给程序。通过在程序中使用函数,可以进行结构化编程。在结构化编程中,各个任务使用独立的程序代码一段一段完成的。而函数正式实现这种 “ 独立的程勋代码段 ” 最理想的方式,所以函数和结构化编程的关系非常之密切。结构化编程之所以很优秀,是有其自己独特的理由的,主要还是如下的两个重要的原因:

 1. 结构化程序更容易被编写,因为复杂的编程问题被划分为多个更小的、更简单的任务。每个任务由一个函数来完成,而函数中的代码和变量独立于程序的其他部分。通过每次处理一个简单的任务,编程的速度将会更加快捷。

 2. 结构化程序更容易调试。如果程序中有一些无法正确运行的代码,结构化设计则使得将问题缩小到特定的单码段,比如一个特定的函数。这样调试错误修改就比较方便,自上到下,从左到右,一步一步按照顺序来进行即可。

结构化编程的一个显著的优点是可以节省时间。如果在一个程序中编写一个执行特定任务的函数,则可以在另一个需要执行相同任务的程序中使用它。即使心程序需要王城的任务稍微不同,但修改一个已有的函数比重新编写一个函数更容易。想想看,你经常使用使用 echo() 和 var_dump() , 虽然首先应该确认程序的功能,必须做一些规划,在规划中必须列出程序要执行的所有具体任务。然后使用函数编写每个具体的任务,在主程序中按执行顺序调用每个任务函数,就组成了一个完整的结构化程序。下面图中所示是一个包含三个函数的程序,其中每个函数都执行特定的任务,可以再主程序中调用一次或者多次。每当函数被调用时,控制权便被传递给函数。函数执行完毕后,控制权返回到调用该函数的位置

如下图所示:

153.png

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

对于每一个函数,zend都通过以下的数据结构来描述

typedef union _zend_function { 
zend_uchar type; /* MUST be the first element of this struct! */ 
struct { 
zend_uchar type; /* never used */ 
char *function_name; 
zend_class_entry *scope; 
zend_uint fn_flags; 
union _zend_function *prototype; 
zend_uint num_args; 
zend_uint required_num_args; 
zend_arg_info *arg_info; 
zend_bool pass_rest_by_reference; 
unsigned char return_reference; 
} common;

zend_op_array op_array; 
zend_internal_function internal_function; 
} zend_function;

typedef struct _zend_function_state { 
HashTable *function_symbol_table; 
zend_function *function; 
void *reserved[ZEND_MAX_RESERVED_RESOURCES]; 
} zend_function_state;

其中type标明了函数的类型:用户函数、内置函数、重载函数。Common中包含函数的基本信息,包括函数名,参数信息,函数标志(普通函数、静态方法、抽象方法)等内容。另外,对于用户函数,还有一个函数符号表,记录了内部变量等,这个将在后面详述。 Zend维护了一个全局function_table,这是一个大的hahs表。函数调用的时候会首先根据函数名从表中找到对应的zend_function。当进行函数调用时候,虚拟机会根据type的不同决定调用方法, 不同类型的函数,其执行原理是不相同的 。

【相关教程推荐】

1. 《php.cn独孤九贱(4)-php视频教程

2.  php编程从入门到精通全套视频教程

3.  php实战视频教程

以上是php自定义函数的工作原理和结构化编程介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn