问题标签 [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.
php - 数组作为类成员和引用计数
有件事让我很困惑。假设有一个类成员
Foo::$bar
,它必须在构造函数中初始化为一个空数组。如果我这样做(通过zend_update_property
),它的引用计数会增加(从在 alloc + 之后得到的 1array_init
到 2)。发生这种情况的原因很明显,因为从zend_update_property
的角度来看,它从外部世界的某个人那里获得了一个变量,因此 ++ 它是正确的。
但在这种特殊情况下,在构造函数中初始化的数组,它不需要 2 的引用计数,1 是正确的,因为它仅由对象使用(还)。
所以我想我会Z_DELREF_P()
的。它奏效了。直到我开始 valgrind,它正在报告:
当引擎销毁对象时会发生这种情况(当对象超出范围时 - 也调用了析构函数)。
所以看起来 ZE 确实需要 refcount 为 2。我编写的所有其他测试工作正常,没有 memleaks,没有任何段错误。
我仍然有点困惑:为什么它需要它高于(根据我的理解)它应该是?
php - 如何使用 php 扩展从类中访问变量?
我在 ubuntu 下使用 c++ 工作。我有以下示例:[car.h]
/ [汽车.cc]
[车辆.cc]
[php_vehicles.h]
[配置.m4]
[测试.php]
为什么?如何解决这个问题?谢谢 !欣赏
php - php 扩展如何从方法返回字符串?
我在 [example.cc] 中有一个方法:
我想从 php 扩展中调用这个方法
我在我的 [test_php.cc] 扩展中写了这个:
我有以下错误:
如果我通过一个简单的调用更改 return_string(..) _ car->accelerate(s)
;它有效..确实它不会打印任何内容作为返回函数。需要一些帮助。欣赏
php - 为什么没有返回php扩展方法?
这是 php_ex.cc 。当我编译我的 .so 库时,retur() 方法不起作用。为什么?我没有错误,但它应该打印“test”并且它没有;t。需要一些帮助。THX
[php_ex.cc]
这是 [example.cc]
我想提一下 Car 类,它的方法是有效的。
php-internals - Zend 扩展,得到 echo 的参数?
我们做了一个 Zend 扩展,我们想写 zval 的 echo 应该写出的地址,但是我们不知道如何接收它们,因为我们注意到 echo "test" 之间存在差异;和 $a = "测试"; 回声$a;
无论它是否是变量,我们如何获得参数?
php - 在扩展中添加条目到 $_SERVER
我需要在 PHP 扩展中向超全局 $_SERVER-array 添加一个条目。我很确定它php_register_variable()
会完成这项工作,将键和值作为参数;但我不知道作为第三个参数传递什么。不幸的是,关于这个主题的文档相当稀少。
php - 包装自定义 php 扩展
我正在尝试从 C 库中包装一个自定义 php 扩展,现在我有一个 Initializer 函数,它启动一个特定的自定义连接,而且似乎很昂贵,我不应该在每次调用该函数时都运行它。
假设我在 ZEND 包装器中有以下内容,
conn_init()
这是一个昂贵的电话,我应该把那个功能放在哪里?
我可以要求用户conn_init()
从 PHP 调用吗?如何调用?
c - Zend 自定义模块
我正在尝试构建自己的 zend 模块(.so)
我们有多种功能可以在我们自己的模块中完成,这将提高我们在高流量网站(每天 50k+ 次访问)上的性能。
这些是简单的模块,但我想知道 zend 使用的语言是否类似于C
?
将当前的 C 代码转换为 Zend 代码有多容易?
例子:
我想检查一棵树中有多少个节点:
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 是我正在执行的任务的正确选择吗?
php - 编写 PHP 操作码并执行。怎么做?
如何编写PHP 操作码,将其保存在文件中并让 Zend 引擎执行它?任何方法或黑客都是受欢迎的,只要它能解决问题。