【PHP源码】PHP 函数调用
想法 我以前对于 C 语言的印象是有很强的确定性,而 PHP 在执行的时候会被翻译为 C 语言执行,所以一直很好奇 PHP 怎么调用底层函数。 换句话说就是已知函数名字的情况下如何调用 C 语言中对应名字的函数? 解决这个问题前,首先根据过往的经验做出假设,然后再去验证。 之前在写《用 C 语言实现面向对象》的时候,就意识到使用 void 指针实现很多功能,包括指向任意的函数。接着在写《PHP 数组底层实现》的时候,了解了 HashTable 的实现,即在 C 语言层面通过字符串 key 找到任意类型值。 现在把两者结合起来,是否就能解决以上问题了?比如说把函数名作为 HashTable 的 key,函数指针作为 HashTable 的 value,这样就可以通过函数名获取函数指针来调用函数了。 接下来通过查看 PHP 的源码来看这个假设与真实情况有多少差距。 总体分为三个步骤: 从 PHP 层进入 C 语言层 找到字符串函数名与函数的关系 函数的调用 注:这篇博客的源码对应的版本是 PHP 7.4.4 。 https://github.com/php/php-src/tree/php-7.4.4 从 PHP 层进入 C 语言层 首先要找到 C 语言层调用函数的地方。怎么找? 经常使用 PHP 的同学看到前面的问题描述很容易联想到 PHP