gpt4 book ai didi

php - 为什么 php 扩展开发与 c++ 开发有如此大的不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:35 25 4
gpt4 key购买 nike

我从事 PHP 开发已经很长时间了,并且开始遇到该语言的一些局限性。因此,话虽如此,我认为我的开发周期的下一步是转向 C++,并构建一些扩展!

当我学习一些标准的“Hello World”教程时,大部分内容似乎都说得通了。我构建了一个相当不错的井字游戏应用程序,所以我认为是时候开始深入研究 PECL 并看看它是如何工作的了。然而,我的发现让我大吃一惊。

谁能解释一下这样做的目的和原因:

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

不是更像这样:

string helloWorld()
{
return "Hello World"
}

PHP_REGISTER_METHOD("helloWorld");

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

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

最佳答案

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 ,这可能是最突出的例子。

关于php - 为什么 php 扩展开发与 c++ 开发有如此大的不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com