PHP中的数据类型

大家都知道,PHP中的整型是long型的,对于:

  1. <?PHP
  2. echo 2888888888;

在32位机器上已经超过了long型的表达范围,应该输出负数吧,但是没有,为什么呢?

好像:
PHP在解析的时候,不是遇见数字就是long型的,至少这里被解释成了DOUBLE型的了,PHP中的数据类型:

  1. /* data types */
  2. /* All data types <= IS_BOOL have their constructor/destructors skipped */
  3. #define IS_NULL     0
  4. #define IS_LONG     1
  5. #define IS_DOUBLE   2
  6. #define IS_BOOL     3
  7. #define IS_ARRAY    4
  8. #define IS_OBJECT   5
  9. #define IS_STRING   6
  10. #define IS_RESOURCE 7
  11. #define IS_CONSTANT 8
  12. #define IS_CONSTANT_ARRAY   9
  13. /* Ugly hack to support constants as static array indices */
  14. #define IS_CONSTANT_INDEX   0x80

在echo的时候总是把数据通过: zend_make_printable_zval(.. 函数转换成char * ,len ,然后输出的。

zend.h中定义了数据的保存方式:

 
  1. typedef union _zvalue_value {
  2.     long lval;                  /* long value */
  3.     double dval;                /* double value */
  4.     struct {
  5.         char *val;
  6.         int len;
  7.     } str;
  8.     HashTable *ht;              /* hash table value */
  9.     zend_object_value obj;
  10. } zvalue_value;
  11. struct _zval_struct {
  12.     /* Variable information */
  13.     zvalue_value value;     /* value */
  14.     zend_uint refcount;
  15.     zend_uchar type;    /* active type */
  16.     zend_uchar is_ref;
  17. };

具体还有更多东西需要研究,现在没时间了。。。

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据