PHP 扩展:如何 return 一个新的 class 对象
PHP Extension: How to return a new class object
我正在创建一个具有多个 class 的扩展,其中一些具有应该 return 另一个 class 实例的方法。这适用于 PHP 7+,不适用于其他任何东西。
例如,我需要这样的 PHP 代码(我正在创建一个 ALPM PHP 扩展)...
$handle_object = new Handle("/", "/var/lib/pacman");
$db_object = $handle_object->get_localdb() /* this returns a Db object */
我目前的代码是...
PHP_METHOD(Handle, get_localdb) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
RETURN_NULL()
}
zval *db_obj = (zval*)emalloc(sizeof(zval));
handle_object *intern = Z_HANDLEO_P(getThis());
object_init_ex(db_obj, alpm_ce_db);
}
我不知道我是在正确的轨道上还是在远离它。
有关项目的更多代码(到目前为止),我已将其发布在要点上 (https://gist.github.com/markzz/27b0aa1123d61a5f9d80ee3aea390f20)。
在 php 聊天的帮助下(谢谢大家)!
PHP_METHOD(Handle, get_localdb) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
RETURN_NULL()
}
handle_object *intern = Z_HANDLEO_P(getThis());
db_object *db;
object_init_ex(return_value, alpm_ce_db);
db = Z_DBO_P(return_value);
db->db = alpm_get_localdb(intern->handle);
}
我正在创建一个具有多个 class 的扩展,其中一些具有应该 return 另一个 class 实例的方法。这适用于 PHP 7+,不适用于其他任何东西。
例如,我需要这样的 PHP 代码(我正在创建一个 ALPM PHP 扩展)...
$handle_object = new Handle("/", "/var/lib/pacman");
$db_object = $handle_object->get_localdb() /* this returns a Db object */
我目前的代码是...
PHP_METHOD(Handle, get_localdb) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
RETURN_NULL()
}
zval *db_obj = (zval*)emalloc(sizeof(zval));
handle_object *intern = Z_HANDLEO_P(getThis());
object_init_ex(db_obj, alpm_ce_db);
}
我不知道我是在正确的轨道上还是在远离它。
有关项目的更多代码(到目前为止),我已将其发布在要点上 (https://gist.github.com/markzz/27b0aa1123d61a5f9d80ee3aea390f20)。
在 php 聊天的帮助下(谢谢大家)!
PHP_METHOD(Handle, get_localdb) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
RETURN_NULL()
}
handle_object *intern = Z_HANDLEO_P(getThis());
db_object *db;
object_init_ex(return_value, alpm_ce_db);
db = Z_DBO_P(return_value);
db->db = alpm_get_localdb(intern->handle);
}