问题标签 [php-internals]

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 回答
140 浏览

php - 数组作为类成员和引用计数

有件事让我很困惑。假设有一个类成员 Foo::$bar,它必须在构造函数中初始化为一个空数组。如果我这样做(通过zend_update_property),它的引用计数会增加(从在 alloc + 之后得到的 1array_init到 2)。发生这种情况的原因很明显,因为从zend_update_property的角度来看,它从外部世界的某个人那里获得了一个变量,因此 ++ 它是正确的。

但在这种特殊情况下,在构造函数中初始化的数组,它不需要 2 的引用计数,1 是正确的,因为它仅由对象使用(还)。

所以我想我会Z_DELREF_P()的。它奏效了。直到我开始 valgrind,它正在报告:

当引擎销毁对象时会发生这种情况(当对象超出范围时 - 也调用了析构函数)。

所以看起来 ZE 确实需要 refcount 为 2。我编写的所有其他测试工作正常,没有 memleaks,没有任何段错误。

我仍然有点困惑:为什么它需要它高于(根据我的理解)它应该是?

0 投票
2 回答
676 浏览

php - 如何使用 php 扩展从类中访问变量?

我在 ubuntu 下使用 c++ 工作。我有以下示例:[car.h]

/ [汽车.cc]

[车辆.cc]

[php_vehicles.h]

[配置.m4]

[测试.php]

为什么?如何解决这个问题?谢谢 !欣赏

0 投票
1 回答
1523 浏览

php - php 扩展如何从方法返回字符串?

我在 [example.cc] 中有一个方法:

我想从 php 扩展中调用这个方法

我在我的 [test_php.cc] 扩展中写了这个:

我有以下错误:

如果我通过一个简单的调用更改 return_string(..) _ car->accelerate(s);它有效..确实它不会打印任何内容作为返回函数。需要一些帮助。欣赏

0 投票
1 回答
486 浏览

php - 为什么没有返回php扩展方法?

这是 php_ex.cc 。当我编译我的 .so 库时,retur() 方法不起作用。为什么?我没有错误,但它应该打印“test”并且它没有;t。需要一些帮助。THX

[php_ex.cc]

这是 [example.cc]

我想提一下 Car 类,它的方法是有效的。

0 投票
1 回答
361 浏览

php-internals - Zend 扩展,得到 echo 的参数?

我们做了一个 Zend 扩展,我们想写 zval 的 echo 应该写出的地址,但是我们不知道如何接收它们,因为我们注意到 echo "test" 之间存在差异;和 $a = "测试"; 回声$a;

无论它是否是变量,我们如何获得参数?

0 投票
2 回答
818 浏览

php - 在扩展中添加条目到 $_SERVER

我需要在 PHP 扩展中向超全局 $_SERVER-array 添加一个条目。我很确定它php_register_variable()会完成这项工作,将键和值作为参数;但我不知道作为第三个参数传递什么。不幸的是,关于这个主题的文档相当稀少。

0 投票
1 回答
135 浏览

php - 包装自定义 php 扩展

我正在尝试从 C 库中包装一个自定义 php 扩展,现在我有一个 Initializer 函数,它启动一个特定的自定义连接,而且似乎很昂贵,我不应该在每次调用该函数时都运行它。

假设我在 ZEND 包装器中有以下内容,

conn_init()这是一个昂贵的电话,我应该把那个功能放在哪里?

我可以要求用户conn_init()从 PHP 调用吗?如何调用?

0 投票
1 回答
138 浏览

c - Zend 自定义模块

我正在尝试构建自己的 zend 模块(.so)

我们有多种功能可以在我们自己的模块中完成,这将提高我们在高流量网站(每天 50k+ 次访问)上的性能。

这些是简单的模块,但我想知道 zend 使用的语言是否类似于C

将当前的 C 代码转换为 Zend 代码有多容易?

例子:

我想检查一棵树中有多少个节点:

0 投票
1 回答
65 浏览

c - 在 KDE 平台上扩展 Zend Engine,gVIM 是正确的选择吗?

我试图在 KDE 环境中向 Zend 引擎介绍一些非常酷的概念。这有点“深核心”的东西,需要大量的资深 C 编码和围绕一个中等复杂的 C 代码库进行黑客攻击。

到目前为止,我认为大人物使用 vim 和一系列知名插件来完成从语法突出显示到代码完成等所有工作。然而,我不明白的一件事是“项目”概念在 vim. Vim 是一个文本编辑器,所以在 vim 中没有项目的概念是最自然的,但是一个人怎么可能使用一个不理解大量文件之间的(语义)关系的编辑器来处理复杂的基于 c 代码的代码库是一个连贯的整体(=项目)?只是举一个具体的例子来说明我的意思,假设我正在看

这是 in file1.c,我想找到zend_compile_file()file2.c. 再举一个例子,我想要所有以“zend_”开头的函数(在项目中的各种文件中定义)或者我想查看在项目中访问变量的位置(注意“跨项目”的共同主题我的例子)。vim 可以为我做这些事情吗?

vim 是我正在执行的任务的正确选择吗?

0 投票
2 回答
2281 浏览

php - 编写 PHP 操作码并执行。怎么做?

如何编写PHP 操作码,将其保存在文件中并让 Zend 引擎执行它?任何方法或黑客都是受欢迎的,只要它能解决问题。