2013-08-18 1 views
1

Впервые я пытаюсь создать extenstion для PHP. Мне нужна функция, которая вернет массив-помощник. Поэтому по причинам тестирования я создал небольшую функцию:Функция расширения PHP array_init throws 'return_value undeclared'

PHP_FUNCTION(testing_array) { 
    char *firstVal = NULL; 
    char *secondVal= NULL; 
    int argc = ZEND_NUM_ARGS(); 
    int firstVal_len; 
    int secondVal_len; 

    if (zend_parse_parameters(argc TSRMLS_CC, "ss", &firstVal, &firstVal_len, &secondVal, &secondVal_len) == FAILURE) 
     return; 

    array_init(return_array); 
} 

Но каждый раз, когда я tryimg для компиляции, компилятор говорит мне:

/root/php/php-src/ext/hello_world/hello_world.c:87: error: return_array undeclared (first use in this function) 
/root/php/php-src/ext/hello_world/hello_world.c:87: error: (Each undeclared identifier is reported only once 
/root/php/php-src/ext/hello_world/hello_world.c:87: error: for each function it appears in.) 

Что я делаю неправильно? В каждом примере, который я видел, переменная массива не объявлена.

+0

Для начала вы никогда не объявляли return_array как ошибку, если она не была array_init (testing_array)? – Kieran

ответ

0

Ошибка довольно ясна. Вы должны объявить переменную return_array перед ее использованием.

+0

Я знаю, что мне нужно объявить об этом, но в каждом учебнике, в каждом примере, который я видел, он никогда не объявлялся. Вы можете увидеть его здесь https://github.com/php/php-src/blob/master/ext/filter/filter.c#L889 - это код filter_list() -функции из стандартного расширения php extension ». –

1

Посмотрите на определение макроса PHP_FUNCTION(). Он объявляет аргумент return_valueнеreturn_array. Вот почему последнее не объявлено.