我遇到了一个C library我希望在PHP中使用函数。这个question让我跟上了php-cpp。但是,如果我可以将php-cpp用于纯C,那么对我来说并不是很清楚。
互联网上的大多数消息人士都认为将C与C ++混合起来是微不足道的,所以我想知道是否值得花时间学习我需要学习的东西以实现目标。
答案 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 ¶ms)
{
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));
}