rfc:zpp-conversion-rules
This is an old revision of the document!
Current :
| Zval type | ||||||||
|---|---|---|---|---|---|---|---|---|
| ZPP type | IS_NULL | IS_FALSE | IS_TRUE | IS_LONG | IS_DOUBLE | IS_STRING | ||
| bool | Yes (-> false) | Native | Native | Yes (1) | Yes (1) | Yes (2) | ||
| long | Yes (-> 0) | Yes (-> 0) | Yes (-> 1) | Native | Yes | (3) | ||
| double | Yes (-> 0.0) | Yes (-> 0.0) | Yes (-> 1.0) | Yes | Native | (4) | ||
| string | Yes (-> “”) | Yes (-> “”) | Yes (-> “1”) | Yes | Yes | Native | ||
- (1) false if null, true if non null
- (2) “” and “0” -> false, other values -> true
- (3) Run string through is_numeric_str_function() and detect error. If double returned, convert it to long
- (4) Run string through is_numeric_str_function() and detect error. If int returned, convert it to double
is_numeric_str_function() behavior :
- Skip leading spaces
- Stop conversion at first non digit character with no error
Proposed changes:
* error if non null fractional part * if string contains float, reject non null fractional part * 3/4 Accept trailing blanks, error if non-blank trailing chars
Result :
| Zval type | ||||||||
|---|---|---|---|---|---|---|---|---|
| ZPP type | IS_NULL | IS_FALSE | IS_TRUE | IS_LONG | IS_DOUBLE | IS_STRING | ||
| null | Yes | No | No | No | No | No | ||
| bool | No | Native | Native | Yes (1) | Yes (1) | No | ||
| strict_bool | No | Native | Native | No | No | No | ||
| long | No | No | No | Native | (2) | (3) | ||
| strict_long | No | No | No | Native | No | No | ||
| double | No | No | No | Yes | Native | (4) | ||
| strict_double | No | No | No | No | Native | No | ||
| string | No | No | No | Yes | Yes | Native | ||
| strict_string | No | No | No | No | No | Native | ||
- (1) false if null, true if non null
- (2) error if fractional part is non null
- (3) Run string through is_numeric_str_function() and detect error. If double with null fractional part returned, convert to long, else error
- (4) Run string through is_numeric_str_function() and detect error. If int returned, convert to double
is_numeric_str_function() behavior :
- Skip leading spaces
- Ignore trailing spaces
- Error on non-blank trailing chars
rfc/zpp-conversion-rules.1424287239.txt.gz · Last modified: (external edit)