php-cpp适用于C库吗?

时间:2014-12-06 18:50:12

标签: php c++ c

我遇到了一个C library我希望在PHP中使用函数。这个question让我跟上了php-cpp。但是,如果我可以将php-cpp用于纯C,那么对我来说并不是很清楚。

互联网上的大多数消息人士都认为将C与C ++混合起来是微不足道的,所以我想知道是否值得花时间学习我需要学习的东西以实现目标。

3 个答案:

答案 0 :(得分:2)

  

但是,如果我可以将php-cpp用于纯C,那么对我来说并不是很清楚。

如果您尝试包含任何实际具有C语言功能但C语言不支持的C ++代码。它根本不会编译。

  

互联网上的大多数消息人士都认为将C与C ++混合起来是微不足道的

仅当您将C代码包含在C ++程序中时才会出现这种情况。即便如此,也有一些例外。

如果你这样做是因为你不了解C ++,你可以编写一个C ++程序,好像它是C(有一些例外,比如void指针),如果你足够小心的话。

答案 1 :(得分:1)

PHP-CPP是一个可用于开发PHP扩展的C ++库。开发PHP扩展需要,尽管它可能会让您的生活变得更轻松。如果您不了解C ++,或者您不想使用它,则可以放心地忽略PHP-CPP。有关开发PHP扩展的一些资源(在C中),请参阅“Getting Started with PHP Extension Development”。

完全可以从C ++调用C库。在大多数情况下,可以使用完全相同的语法;最多,您可能需要使用extern "C" { ... }包装C头文件。

答案 2 :(得分:1)

是的,您可以在PHP-CPP中将C混入C ++,但这对初学者来说不是一个好方法,因为您必须了解两者的相关API。

对于那些完成任务的人,您将需要包括来自PHP的相应头文件,就像您正在编写标准C扩展一样,例如

#include <php.h>
#include <php_globals.h>
#include <php_main.h>
#include <php_network.h>
// etc

您还需要为您的PHP-CPP项目修改Makefile,并为您的PHP源位置添加准确的包含目录,对我而言

COMPILER_FLAGS = -I/usr/local/include/php -I/usr/local/include/php/main ... etc ... -Wall -c -O2 -std=c++11 -fpic -o

在您的PHP-CPP函数/类中添加标准的PHP / ZEND API C代码

Php::Value example(Php::Parameters &params)
{
    zval myval;
    zend_string *hello, *world;

    hello = zend_string_init("hello", strlen("hello"), 0);

    /* Stores the string into the zval */
    ZVAL_STR(&myval, hello);

    /* Reads the C string, from the zend_string from the zval */
    php_printf("The string is %s", Z_STRVAL(myval));

    world = zend_string_init("world", strlen("world"), 0);

    /* Changes the zend_string into myval : replaces it by another one */
    Z_STR(myval) = world;
    zend_string_release(hello);
    zend_string_release(world);

    return Php::Value(Z_STRVAL(myval));
 }