使用自定义C ++库的PHP扩展

时间:2012-04-17 07:30:47

标签: php c++ c xcode

我在C中创建了一个PHP扩展,但我想在我自己的C ++动态库中提供我的程序的所有功能(我将在Xcode中编程)。

我的问题是如何在我的php扩展中链接(和使用)我的c ++ dynlib中的函数(它将充当我的c ++库的包装器)。我需要在config.m4中修改哪些内容才能链接到我的c ++库?

1 个答案:

答案 0 :(得分:2)

将C包装器接口写入C ++库,然后为此创建PHP扩展。

对于C接口,您将类声明为“struct”,即使它们是具有私有方法的C ++类。无论如何,您不会公开细节,只使用前向声明。

所有公共方法都通过带有指针的自由函数公开,并通过Create方法创建实例并使用Destroy方法销毁它们。

那么你基本上与“C库”进行交互,但实现是用C ++实现的。

请注意,您应该输入:

#ifdef __cplusplus
extern "C" {
#endif

位于标题的顶部(在方法之前但在包含警戒之后)和

#ifdef __cplusplus
}
#endif

在他们的最后(在方法之后但在包括警卫之前)

因为您必须使用C ++编译器实际构建包装器库,因为它将通过调用库中的C ++函数来实现。

请注意,您可以使C包装器成为使用另一个库的新库,或者是同一个库的一部分。

另一种方法是使用PHP包装器宏,它本质上也会创建绑定,但会为您完成大部分工作。参见

http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/

这也将向您展示如何处理config.m4文件。