为什么php扩展开发与c ++开发有很大不同?

时间:2012-03-27 14:49:55

标签: php c++ pecl

我是一名很长时间的PHP开发人员,而且我开始在语言中遇到一些限制。所以,说到这一点,我认为我的开发周期的下一步将是转向C ++,并构建一些扩展!

当我通过一些标准的“Hello World”教程时,一切似乎都有意义。我建立了一个相当不错的tic-tac-toe应用程序,所以我认为是时候开始潜入PECL并看看事情是如何运作的。然而,我发现了什么,让我感到震惊。

任何人都可以解释为什么这样的目的和推理:

PHP_FUNCTION(helloWorld)
{
    RETURN_STRING("Hello World");
}

并不是更多:

string helloWorld()
{
    return "Hello World"
}

PHP_REGISTER_METHOD("helloWorld");

我不是假装我比创造这种语言的人更了解,而且我不是想挑起任何麻烦。看起来(至少从初学者的角度来看),创建PHP扩展并不像编写C ++程序。除了一些基本的语法规则外,它几乎完全是一种不同的语言。

任何帮助将不胜感激。只是一个尝试成长的初学者:)

1 个答案:

答案 0 :(得分:6)

PHP扩展开发与其他C / C ++开发没有太大差别。唯一特别的是你必须将PHP脚本世界与你的C / C ++函数连接起来。这个任务并不简单,这里需要奇怪的宏,如PHP_FUNCTION。

例如,如果要从PHP调用函数“helloWorld”,解释器需要查找“helloWorld”并将其映射到C函数。这个函数需要有一定的签名,这意味着它必须接受一组特定的参数,并且必须返回一定的值。这不是任意的,解释器不能只调用任何C / C ++函数。

这就是像C这样的低级语言是如何工作的,你不能“检查”函数采用什么样的参数。

特别是,PHP解释器中的所有值都是不能转换为C ++类型的特殊结构。 PHP字符串与C ++ std :: string不同。 PHP API提供了各种转换值的工具,但您必须知道如何使用它们。

一旦你知道如何编写一个可以从PHP调用的C函数,你就处于“C / C ++世界”,在那里你可以调用另一个C / C ++函数并使用C / C ++类型。从现在开始,它就像编写纯C / C ++应用程序一样。好吧,直到你必须将值返回给PHP世界,你必须再次使用PHP API工具。

通过帮助生成所需的“粘合代码”来连接脚本语言(如PHP和“纯”C ++项目),有些工具可以让您的生活更轻松。看看SWIG,这可能是最突出的例子。