Внутренние компоненты PHP — получение логического аргумента

При написании и просмотре исходного кода некоторых расширений PHP я заметил, что некоторые используют флаг типа LONG для разбора логического параметра:

bool new_map_embed;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_map_embed) == FAILURE) {
RETURN_FALSE;
}

Это почему? Почему бы не использовать b флаг вместо?

1

Решение

Скорее всего, программист ошибся (возможно, они не знали b существовал?), или параметр не является логическим (возможно, принимает другие значения). Это не обычная практика.

В PHP 5 IS_BOOL хранит его значение в том же месте, что и IS_LONG во всяком случае, так что вы могли бы быть прощены за то, что вы думаете, что вы должны использовать l Вот.

1

Другие решения

Вы можете использовать что-то вроде:

zend_bool new_map_embed;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &new_map_embed) == FAILURE) {
RETURN_FALSE;
}

Пожалуйста, посмотрите на реальный пример внутри файла zend_builtin_functions.c, а затем найдите zend_bool, вы увидите, как PHP использует это.

-1

По вопросам рекламы [email protected]