在寫和看一些PHP擴展的源代碼,我注意到一些使用長型標誌,以解析布爾參數:PHP內部 - 讓一個boolean參數
bool new_map_embed;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_map_embed) == FAILURE) {
RETURN_FALSE;
}
這是爲什麼?爲什麼不使用b
標誌呢?
在寫和看一些PHP擴展的源代碼,我注意到一些使用長型標誌,以解析布爾參數:PHP內部 - 讓一個boolean參數
bool new_map_embed;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_map_embed) == FAILURE) {
RETURN_FALSE;
}
這是爲什麼?爲什麼不使用b
標誌呢?
您可以使用類似:
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
存在?),或者該參數實際上不是布爾值(可能接受其他值)。這不是常見的做法。
在PHP 5中,IS_BOOL
其存儲在同一個地方IS_LONG
值,所以你可能已經原諒的思想,你應該在這裏使用l
。
我知道我可以使用'b'我的問題是爲什麼解析只要'l'是一種常見的做法 –
@ShlomiHassid爲什麼你認爲這是常見的做法?事實並非如此。 – NikiC
@Nikic我看到它越來越多,只是想知道爲什麼,這是一個很好的做法 –