关闭

65-匿名函数及闭包

65-匿名函数及闭包匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。闭包(Closure)...
阅读(809) 评论(0)

64-引用与函数执行

64-引用与函数执行一个函数的执行结果要返回给调用者,除了使用return功能,还有一种办法,那就是以引用的形式传递参数,然后在内部修改这个参数的值。前一种方法往往只能返回一个值,如果我们的函数执行结果具有多种数据,便需要把这些数据打包到一个数组、类等复合类型的变量中才能得以实现;但后一种方法相比而言就简单一些了。运行时传递引用:Call-time Pass-by-ref标题有点绕口,其实很简单,功...
阅读(794) 评论(0)

63-函数调用与执行

63-函数调用与执行前面对函数的内部表示以及参数的传递,返回值都有了介绍,那函数是怎么被调用的呢?内置函数和用户定义函数在调用时会有什么不一样呢? 下面将介绍函数调用和执行的过程。 函数的调用函数被调用需要一些基本的信息,比如函数的名称,参数以及函数的定义(也就是最终函数是怎么执行的), 从我们开发者的角度来看, 定义了一个函数我们在执行的时候自然知道这个函数叫什么名字,以及调用的时候给传递了什么...
阅读(542) 评论(0)

62-形参return value

62-形参return valuePHP语言中函数的返回值是通过return来完成了,就像下面的程序: C语言也一样使用return关键字:int sample_long(void) { return 42; } int main(void) {...
阅读(711) 评论(0)

61-函数返回值

61-函数返回值在编程语言中,一个函数或一个方法一般都有返回值,但也存在不返回值的情况,此时,这些函数仅仅仅是处理一些事务, 没有返回,或者说没有明确的返回值,在pascal语言中它有一个专有的关键字 procedure 。 在PHP中,函数都有返回值,分两种情况,使用return语句明确的返回和没有return语句返回NULL。return语句当使用return语句时,PHP给用户自定义的函数返回...
阅读(827) 评论(0)

60-zend_parse_parameters函数

60-zend_parse_parameters函数最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_CC,注意两者之间有个空格,但是没有逗号。从名字可以看出,ZEND_NUM_ARGS()代表这参数的个数...
阅读(784) 评论(0)

59-函数的参数

59-函数的参数前面介绍了函数的定义,函数的定义只是一个将函数名注册到函数列表的过程,在了解了函数的定义后,我们来看看函数的参数。 这一小节将包括用户自定义函数的参数和内部函数的参数两部分,详细内容如下:用户自定义函数的参数我们对于参数的类型提示做了分析,这里我们在这一小节的基础上,进行一些更详细的说明。 在经过词语分析,语法分析后,我们知道对于函数的参数检查是通过 zend_do_receive_...
阅读(649) 评论(0)

58-定义函数的过程

58-定义函数的过程在PHP中,用户函数的定义从function关键字开始。如下所示简单示例:function foo($var) { echo $var; } 这是一个非常简单的函数,它所实现的功能是定义一个函数,函数有一个参数,函数的内容是在标准输出端输出传递给它的参数变量的值。函数的一切从function开始。我们从function开始函数定义的探索之旅。词法分析在 Zend/zend...
阅读(997) 评论(0)

57-函数结构转换

57-函数结构转换在函数调用的执行代码中我们会看到这样一些强制转换:EX(function_state).function = (zend_function *) op_array; 或者:EG(active_op_array) = (zend_op_array *) EX(function_state).function; 这些不同结构间的强制转换是如何进行的呢?首先我们来看zend_functi...
阅读(595) 评论(0)

56-函数的内部结构

56-函数的内部结构在PHP中,函数有自己的作用域,同时在其内部可以实现各种语句的执行,最后返回最终结果值。 在PHP的源码中可以发现,PHP内核将函数分为以下类型:#define ZEND_INTERNAL_FUNCTION 1 #define ZEND_USER_FUNCTION 2 #define ZEND_OVERLOADED_...
阅读(542) 评论(0)

55-函数的分类

55-函数的分类函数是一种可以在任何被需要的时候执行的代码块。它不仅仅包括用户自定义的函数,还包括程序语言实现的库函数。用户定义的函数如下所示手册中的展示函数用途的伪代码:function foo($arg_1, $arg_2, ..., $arg_n) { echo "Example function.\n"; return $retval; } 任何有效的 PHP 代码都可以编写...
阅读(558) 评论(0)

54-数组源码分析

54-数组源码分析PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一...
阅读(593) 评论(0)

53-数组操作

53-数组操作当你在扩展中使用HashTable时候,95%是要存储用户端的变量,就像PHP语言中数组那样。为此,内核中已经准备好了相应的工具,来让我们更加的方便的操作HashTable存储zval*,也就是PHP语言中的数组,即IS_ARRAY常量代表的zval,以下用{数组}来代替PHP语言中的数组这个词。创建数组创建HashTable有些繁琐,虽然有辅助的宏但还是不能一步完成,而创建数组便简单...
阅读(525) 评论(0)

52-使用哈希表API

52-使用哈希表APIZend把与HashTable有关的API分成了好几类以便于我们寻找,这些API的返回值大多都是常量SUCCESS或者FAILURE。创建HashTable下面在介绍函数原型的时候都使用了ht名称,但是我们在编写扩展的时候,一定不要使用这个名称,因为一些PHP宏展开后会声明这个名称的变量,进而引发命名冲突。创建并初始化一个HashTable非常简单,只要使用zend_hash_...
阅读(4987) 评论(0)

51-数组与链表

51-数组与链表在C语言中,我们可以自定义各种各样的数据结构,用来把很多数据保存在一个变量里面,但是每种数据结构都有自己的优缺点,PHP内核规模如此庞大,是否已经找到了一些非常棒的解决方法呢?我们在选择各种数据结构时,往往会考虑我们需要处理的数据规模以及需要的性能。下面让我们简要的看一下看C语言中数组和链表的一些事情。数组作者这里用的不是Array,而是Vector,可能指的是C++里的Vector...
阅读(578) 评论(0)
128条 共9页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:178106次
    • 积分:2964
    • 等级:
    • 排名:第13171名
    • 原创:124篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类