Я создаю расширение, имеющее несколько классов, и некоторые из них имеют методы, которые должны возвращать экземпляры другого класса. Это для PHP 7+ и ни для чего другого.PHP Extension: как вернуть новый объект класса
Например, мне нужен 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);
}
У меня нет подсказки, если я на правильном пути или далеко от него.
Дополнительный код проекта (до сих пор), я опубликовал его на gist (https://gist.github.com/markzz/27b0aa1123d61a5f9d80ee3aea390f20).
Что-то рядом с 'object_init_ex (return_value, alpm_ce_db);' должно идти в правильном направлении. 'return_value' передается каждой функции и методу и содержит возвращаемое значение (инициализируется значением NULL) – bwoebi