首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php-cpp是否适用于C库?

php-cpp是否适用于C库?
EN

Stack Overflow用户
提问于 2014-12-07 02:50:12
回答 3查看 405关注 0票数 3

我遇到了一个C library,我想在其中使用PHP中的函数。这个question把我带到了php-cpp的轨道上。但是我在任何地方都不清楚是否可以使用php-cpp纯C语言。

互联网上的大多数资源都说,将C和C++混合在一起是微不足道的,所以我想知道是否值得投入我的时间来学习我需要学习什么来实现这个目标。

EN

回答 3

Stack Overflow用户

发布于 2014-12-07 05:58:41

,但我在任何地方都不太清楚是否可以使用纯C语言。

如果您尝试包含任何具有C语言在C程序中不支持的C++特性的C++代码。它根本不会编译。

互联网上的大多数资源都说,将C语言与C++混合使用是微不足道的

只有在将C代码包含到C++程序中时才会出现这种情况。即使这样,也有一些例外。

如果您这样做是因为您不了解C++,那么如果您足够小心,您可以像编写C一样编写C++程序(有一些例外,比如空指针)。

票数 2
EN

Stack Overflow用户

发布于 2014-12-07 08:13:31

CPP是一个C++库,可以用来开发PHP扩展。开发PHP扩展需要的是而不是,尽管这可能会让你的工作变得更容易一些。如果您不了解C++,或者不想使用它,那么可以放心地忽略PHP-CPP。有关开发Getting Started with PHP Extension Development扩展的一些参考资料(C语言),请参阅“PHP”。

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

票数 1
EN

Stack Overflow用户

发布于 2018-08-04 15:39:31

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

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

代码语言:javascript
复制
#include <php.h>
#include <php_globals.h>
#include <php_main.h>
#include <php_network.h>
// etc

您还需要修改PHP-CPP项目的Makefile,并为PHP源代码位置添加准确的包含目录。

代码语言:javascript
复制
COMPILER_FLAGS = -I/usr/local/include/php -I/usr/local/include/php/main ... etc ... -Wall -c -O2 -std=c++11 -fpic -o

将标准PHP/ZEND API C代码添加到PHP-CPP函数/类中

代码语言:javascript
复制
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));
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27335168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档