2012-03-27 64 views
4

我已经很长时间了PHP开发人员,并且我开始在语言中遇到一些限制。所以,据说,我认为我的开发周期中的下一步将是转向C++,并构建一些扩展!为什么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 2012-03-27 14:52:32

+4

php将整个元数据中的每一点数据都包裹起来。它自己的函数,如register_string(),处理所有为你。 – 2012-03-27 14:52:42

+3

我不想听起来居高临下,但是您有多少经验用C++编写真实世界的程序,或者使用现有的C++程序与大量现有的代码库一起工作? – NullUserException 2012-03-27 14:54:33

回答

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

+0

非常感谢你回答:)我在阅读时有一点点心理咔嗒声,而且我很确定我现在知道了。 – syntaqx 2012-03-27 15:15:47