IT技术博客大学习 共学习 共进步

PHP中的数据类型

PHPor 的blog 2011-02-28 23:20:56 累计浏览 3,123 次

大家都知道,PHP中的整型是long型的,对于:
<?PHP
echo 2888888888;
在32位机器上已经超过了long型的表达范围,应该输出负数吧,但是没有,为什么呢?

好像:
PHP在解析的时候,不是遇见数字就是long型的,至少这里被解释成了DOUBLE型的了,PHP中的数据类型:
/* data types */
/* All data types <= IS_BOOL have their constructor/destructors skipped */
#define IS_NULL     0
#define IS_LONG     1
#define IS_DOUBLE   2
#define IS_BOOL     3
#define IS_ARRAY    4
#define IS_OBJECT   5
#define IS_STRING   6
#define IS_RESOURCE 7
#define IS_CONSTANT 8
#define IS_CONSTANT_ARRAY   9

/* Ugly hack to support constants as static array indices */
#define IS_CONSTANT_INDEX   0x80

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

zend.h中定义了数据的保存方式:
 
typedef union _zvalue_value {
    long lval;                  /* long value */
    double dval;                /* double value */
    struct {
        char *val;
        int len;
    } str;
    HashTable *ht;              /* hash table value */
    zend_object_value obj;
} zvalue_value;


struct _zval_struct {
    /* Variable information */
    zvalue_value value;     /* value */
    zend_uint refcount;
    zend_uchar type;    /* active type */
    zend_uchar is_ref;
};

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

建议继续学习

  1. MySQL数据库中的5种数据类型简介 (累计阅读 5,224)
  2. MySQL数据库数据类型之枚举类型ENUM测试总结 (累计阅读 4,703)
  3. MySQL数据库数据类型之ENUM、SET、BOOL/BOOLEAN、TINYINT (累计阅读 3,782)
  4. Java数据类型和MySql数据类型对应表 (累计阅读 2,984)
  5. 再谈JavaScript的数据类型问题 (累计阅读 2,842)