问题标签 [php-cpp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
116 浏览

php - 调用 'Php::Extension::add() 没有匹配的函数

我正在使用 PHP-CPP 创建 PHP 扩展来调用 c++ 函数。通过 PHP-CPP 将我的 cpp 集成到 cpp 的示例代码后,我解决了许多错误。但我陷入了以下错误,

我的 Cpp 文件如下

请建议我一些解决上述错误的方法。

0 投票
1 回答
98 浏览

php - 在浏览器中打印 PHP-CPP 结果

我正在用 c++ 开发一个 PHP-CPP 扩展。当我通过命令行运行它时,我的扩展程序运行良好。但是当我尝试在浏览器中运行它时,浏览器会显示类或函数未在此处声明的错误。谁能告诉我如何在浏览器中运行它?

PHP 文件:

请看图片 图片将提供更好的想法

0 投票
1 回答
579 浏览

c++ - 为什么用 C++ 编写的 phpcpp 扩展函数比用 php 编写的函数慢

我最近使用PHPCPP 创建了一个 php 扩展 - 用于开发 PHP 扩展的 C++ 库,并期待性能提升,但是我只看到性能下降,而不是看到提升。我相信我做错了什么,也许有人可能会发现为什么会这样?

这是一个 C++ 代码

这是命令行扩展编译

这是我的简单测试

结果是

结论用 C++ 编写的 PHP 函数要慢 4 倍。有人能说出为什么吗?有没有办法改进我的 C++ 代码?

0 投票
1 回答
391 浏览

c++ - 如何使用 PHPCPP 传递对象数组,遍历每个对象并返回关联数组

我最近开始学习PHPCPP - 一个用于开发 PHP 扩展的 C++ 库并试图理解:

  1. 如何通过 PHPCPP 库将对象数组从 php 传递到 C++,例如仅分别提供有关数组和对象的信息,
  2. 那么如何在 C++ 中遍历每个对象
  3. 以及如何将关联数组返回给 PHP

有人可以指出我正确的方向吗?

我想出了这个例子但是需要一些帮助:

0 投票
1 回答
605 浏览

c++ - 如何转换 C++ 地图> 到 PHPCPP 库中的 Php::Value?

我正在使用 PHP 库创建 PHP 扩展,并且在将 C++ 映射变量转换为Php::Value函数返回的 PHPCPP 时遇到了困难。我这样做的原因是从用 C++ 编写的函数中获取多维关联数组结果。

有没有办法将 C++ 转换map < string, map < double, map < double, map< double, map< string, map< int, double>>>>>> dataPhp::ValuePHPCPP,或者有更好的方法来处理这个问题?

这是我的 C++ 代码:

编译器给出这些错误:

任何建议如何解决这些错误?

更新 已尝试通过修改 C++ 来实现下面建议的示例 Caleth:

但是现在还有其他错误:

0 投票
1 回答
101 浏览

php - 如何使用 php-cpp 在 php 类中添加静态数组

我想添加一个静态成员,如下所示


这是我的 C++ 代码,


注册扩展,如何设置一个 Php::Array 或 Php::value 到这个属性

0 投票
0 回答
812 浏览

php - 使用 php-cpp 错误:未定义符号:executor_globals in Unknown on line 0

我成功编译了EmptyExtension并得到了 salamander_php.so(我的扩展名)。然后我将它复制到 php extension_dir 并在 extension=salamander_php.so 输入时将该行添加到 php.ini 中php -v我收到警告

0 投票
1 回答
171 浏览

c++ - 在 Visual Studio 2017 中将 PHP-CPP 库链接到 Linux 项目

我有一个小型 C++ 测试项目,它应该会在适用于 Linux 的 Windows 子系统(WSL,或多或少 = Ubuntu 14.x)上生成一个 .so 库。为了获得 PHP 扩展,PHP-CPP 库的当前版本链接到项目。编译器是 Linux 上的 g++ 4.8,可从 Visual Studio 远程操作。在属性中,我添加了 -fpic 用于编译和 -lphpcpp 链接 libphpcpp.so。使用旧版本的 Visual Studio 2017(直到 02/2018)一切运行良好,构建也很好。

更新到 Visual Studio 2017 的当前版本(15.5.6,02/2018)后,构建以许多相同类型的链接错误结束:/usr/bin/ld : error : relocation x has invalid symbol index y,其中数字 x 和 y 不同。我不知道这里会发生什么。

这个小项目包括使用这里的想法:

Visual Studio 中的 DLL ... 和 ... PHP-CPP 第一个扩展

Visual Studio 中记录的链接选项:

ld/g++ 错误消息的最后几行:

我的代码在这里:MathFuncs.h:

...和main.cpp:

0 投票
0 回答
77 浏览

php - 如何在 centos 6.9 上使用 phpv5.3.3 安装和配置 phpcpp 遗留模块

使用phpv5.3.3安装和编译phpcpp旧版模块后出现错误

php -v PHP 警告:PHP 启动:无法加载动态库 '/usr/lib64/php/modules/libphpcpp.so' - /usr/lib64/php/modules/libphpcpp.so:未定义符号:在线未知中的 _ZN3Php9StreamBuf4syncEv 0 PHP 5.3.3 (cli) (build: Mar 22 2017 12:27:09) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

0 投票
2 回答
123 浏览

c++ - 很难确定 std::map 的正确值类型

附录:

让我简化我的问题,一次尝试这一步,因为我觉得我对我想要实现的目标造成了太多的困惑。

请注意,我使用的是 C++11,并且我认为在使用 PHP-CPP 库时我一定会使用它。但是,由于我是一个完全的初学者,我什至不确定这一点。

我的最终目标是“简单地”创建一个可以保存模板返回的任何值的映射。Php::Class但是,让我们从尝试一个具体的开始,例如Php::Class<Animal::Mammal>

首先,我在命名空间中创建了一个Animal名为的类Mammal,它的扩展自Php::Base(当你想用 PHP-CPP 将一个类导出到 PHP 时,它需要扩展Php::Base):

然后,为了简单起见,让我现在尝试在内部创建一个地图get_module(),然后尝试在其中添加一个元素:

这导致:

当我尝试:

这导致:

我也尝试了许多其他的东西,但似乎没有什么可以让我将模板Php::Class创建的任何内容放入地图中。在这一点上,我正在拔头发。我错过了什么?

是不是模板Php::Class创建了一些根本无法放入地图的东西?我如何找出模板Php::Class实际创建的东西是什么?


原始问题:

尽管我对 C++ 有一些粗略的了解,但我对实际使用它进行编程还是很陌生。

我正在尝试使用PHP-CPP开发 PHP 扩展。使用这个库,您可以定义 C++ 类并将它们导出为 PHP 类。他们的文档几乎只展示了在其主函数中导出这些类和方法的示例。get_module()

然而,由于这很快就会变得相当混乱,我想把这个逻辑移到靠近各个类的地方。所以,我为此创建了一个模板函数:

然后我专门研究以下内容:

...然后get_module()我这样做:

如您所见,我还想将每个单独的类添加到Animal::ClassMap地图中,因为我想在后续类需要从它们扩展时使用它们(即导出到 PHP):

但这就是我遇到的极大困难。我试图以Animal::ClassMap各种方式定义:

并试图以各种方式分配给它:

但没有任何编译。

我遇到了从“operator*未定义”到“不完整的类”(或类似的东西)到“模板参数无效”的编译错误。

正如你所看到的,我显然缺乏对这里需要做什么的实际理解。

如何确定地图的正确值类型应该是什么,然后如何正确地将“类”(它甚至是正确的类?)添加到地图中?


PS:我相当有信心我已经正确地将所有必要的头文件/文件包含在适当的文件中。为简洁起见,我只是在示例中省略了这些内容。