Передача переменной ссылкой в расширение PHP

Это много http запросов, если вы повторяете свои идентификаторы и получаете для каждого ID компании. Тем не менее, это то, что вы можете сделать, чтобы ваш конкретный случай стал работать:

companyIDs.forEach(companyId => {
    this.companyService.getCompanyName(companyId)
        .subscribe(compName => this.items.push({
             compId: companyId, compName: compName 
    })
});

проблема с этим подходом заключается в том, что вы должны делать запрос на обслуживание за одну итерацию, что означает, что массив из 100 Id сделал бы это для 100 HTTP-запроса, что не близко к идеалу ....

Если вы можете сделать httpCall, который получит всю таблицу идентификаторов и названий компаний в таблице, как показано в вашем вопросе ... например, this.service.getAllCompanies() // return all the company objects with { id, name }, тогда вы можете сделать этот вызов, и ТО перебрать В результате получается простой http-запрос.

8
задан John Carter 24 March 2009 в 19:38
поделиться

1 ответ

Редактирование 13.09.2011: корректный способ сделать это должно использовать ZEND_BEGIN_ARG_INFO() семейство макросов - видит Расширение и Встраивание глава 6 PHP (Sara Golemon, Библиотека Разработчика).

Эта функция в качестве примера берет один аргумент строки значением (из-за ZEND_ARG_PASS_INFO(0) звоните) и все другие после этого ссылкой (из-за второго аргумента ZEND_BEGIN_ARG_INFO быть 1).

const int pass_rest_by_reference = 1;
const int pass_arg_by_reference = 0;

ZEND_BEGIN_ARG_INFO(AllButFirstArgByReference, pass_rest_by_reference)
   ZEND_ARG_PASS_INFO(pass_arg_by_reference)
ZEND_END_ARG_INFO()

zend_function_entry my_functions[] = {
    PHP_FE(TestPassRef, AllButFirstArgByReference)
};

PHP_FUNCTION(TestPassRef)
{
    char *someString = NULL;
    int lengthString = 0;
    zval *pZVal = NULL;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &someString, &lengthString, &pZVal) == FAILURE)
    {
        return;
    }

    convert_to_null(pZVal);  // Destroys the value that was passed in

    ZVAL_STRING(pZVal, "some string that will replace the input", 1);
}

Прежде, чем добавить convert_to_null это пропустило бы память на каждом вызове (я не имею, необходимо ли это после добавления ZENG_ARG_INFO() вызовы).

7
ответ дан 5 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: