При написании и изучении исходного кода 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 его использует.
b
мой вопрос , почему разборе до тех пор ,l
является обычной практикой