Preface

当今世道,各种高级语言百花齐放。然而会有人发出这样的疑问–计算机真的能够识别这么多语言吗?稍微有点常识的人都知道,这显然是不可能滴!在计算机的世界里,他们能够直接识别的只有机器语言。然而,由于机器语言对人类不够友好,所以人们才发明了汇编,c,Java…许许多多的人类易读的编程语言,所以我个人对编程语言的理解一直是其实他们就是机器语言的语法糖,而编程语言的创造过程,就是定义一种合理的,没有二义性的语法规则,然后就是通过直接或间接的方式实现该语法到机器语言的转换过程。既然是这样的话,那么我们就很容易想到,计算机语言是一个自我完善的过程:首先我们定了一种非常简单的 x1(这里只是用来举例说明,有...

函数调用

很多时候,我们需要通过函数名来调用函数,并传递参数,或者把匿名函数作为函数的参数传递,实现回调。当我们在遇到这样的需求的时候,用 php 代码实现起来肯定是非常容易和简单的。但是,当我们在用 c 语言编写 php 扩展的时候,如何来实现这样的功能呢?下面就一起来深入了解 php 内核,看看如何实现。

在 Zend 引擎中,给我们提供了zend_call_function,call_user_function以及call_user_function_ex函数来帮助我们实现函数调用。在zend_API.h文件中,我们可以看到如下函数原型的声明:

ZEND_API int zend_call_function(...