При написании и просмотре исходного кода некоторых расширений PHP я заметил, что некоторые используют флаг типа LONG для разбора логического параметра:
bool new_map_embed;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_map_embed) == FAILURE) {
RETURN_FALSE;
}
Это почему? Почему бы не использовать b
флаг вместо?
Скорее всего, программист ошибся (возможно, они не знали b
существовал?), или параметр не является логическим (возможно, принимает другие значения). Это не обычная практика.
В PHP 5 IS_BOOL
хранит его значение в том же месте, что и IS_LONG
во всяком случае, так что вы могли бы быть прощены за то, что вы думаете, что вы должны использовать l
Вот.
Вы можете использовать что-то вроде:
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 использует это.