为什么PHP扩展开发与C++开发差别如此之大?

4
我是一名PHP开发者已经有相当长时间了,我开始在语言方面遇到一些限制。因此,我认为我下一个发展周期的步骤应该是转向C++并构建一些扩展程序!
当我通过一些标准的“Hello World”类教程时,大部分都很好理解。我还建立了一个相当不错的井字棋应用程序,所以我认为现在是时候开始深入研究PECL并了解其工作原理。然而,我发现了一些令人难以置信的东西。
请问有人可以解释一下为什么需要这样做的目的和原因吗?
PHP_FUNCTION(helloWorld)
{
    RETURN_STRING("Hello World");
}

这句话更应该是这样的:
string helloWorld()
{
    return "Hello World"
}

PHP_REGISTER_METHOD("helloWorld");

我并不自认比创造此语言的人更懂它,也无意引起任何麻烦。但至少从初学者的角度看,创建PHP扩展与编写C++程序几乎完全不同,除了一些基本的语法规则之外。若有帮助,不胜感激。只是一个初学者努力成长 :)

3
猜测PHP_FUNCTION和RETURN_STRING是宏,可以在“幕后”执行一些操作。 - Konrad
4
PHP会将每个数据都包装在一堆元数据中。像register_string()这样的内置函数会代替你处理所有这些内容。 - Marc B
3
请问您有多少实际编写C++程序或处理具有大型现有代码库的C++程序的经验?我不想显得高傲,但希望您如实回答。 - NullUserException
完全没有。我在我的帖子中试图概述这一点,但我只是刚开始不到一周,这只是我试图理解的初步印象。 - syntaqx
1
@syntaqx:这只是PHP插件实现的方式。它仍然是C++,但有许多包装器。你可能可以手动完成所有操作,但这些包装函数可以遮盖掉很多“挥舞锤子”的繁琐工作。 - Marc B
显示剩余2条评论
1个回答

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


非常感谢您的回答 :) 当我在阅读时,我有一点心理上的启示,我相当确定现在我明白了。 - syntaqx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接