如题所述
第1个回答 2017-03-28
PHP 和 C++不沾边 , 是 C 写的 . 就目前而言 , 所有版本都是的 .
不是内置函数是 C 实现的 , 整个 PHP 从 sapi->词法分析(re2c , zend_language_scanner.l)->语法分析(bison, zend_language_parser.y)->zendVM , 都是 C 实现的 .
扩展实现 function add($x, $y)(return $x+y;} 这个属于大炮打小鸟 , 你可以用 phpsrc/ext/ext_skel 自己建一个扩展骨架看看就明白了 .
PHP 想调用 C 中的东西很简单 , 假如现在有个动态链接库 , liba.so , 其中有一个 int a() ;并且提供一个 a.h 包含函数 a 的定义 , 那就简单了 , 使用 c 编译选项如下
gcc -I[a.h所在路径] -L[liba.so所在路径] -la xx.c test
xx.c 中调用 a() 就不列了 , 仅列编译选项 . 因为 PHP 扩展要调动态链接库中的函数,重要的是环境配置。
使用 ext_skel 生成的扩展框架中会有一个 config.m4 , 在那个里面可以做一些 gcc 选项 , 你可以自己研究研究
不是内置函数是 C 实现的 , 整个 PHP 从 sapi->词法分析(re2c , zend_language_scanner.l)->语法分析(bison, zend_language_parser.y)->zendVM , 都是 C 实现的 .
扩展实现 function add($x, $y)(return $x+y;} 这个属于大炮打小鸟 , 你可以用 phpsrc/ext/ext_skel 自己建一个扩展骨架看看就明白了 .
PHP 想调用 C 中的东西很简单 , 假如现在有个动态链接库 , liba.so , 其中有一个 int a() ;并且提供一个 a.h 包含函数 a 的定义 , 那就简单了 , 使用 c 编译选项如下
gcc -I[a.h所在路径] -L[liba.so所在路径] -la xx.c test
xx.c 中调用 a() 就不列了 , 仅列编译选项 . 因为 PHP 扩展要调动态链接库中的函数,重要的是环境配置。
使用 ext_skel 生成的扩展框架中会有一个 config.m4 , 在那个里面可以做一些 gcc 选项 , 你可以自己研究研究