4.3.1 字符串的赋值与写时分离
    变量是简单类型(true/false/double/long/null)时直接拷贝值,不需要引用计数
    变量是临时的字符串,在赋值时会用到引用计数;如果是字符常量,则不会用到
    变量是对象(zval.v.type=IS_OBJECT)、资源(zval.v.type=IS_RESOURCE)、引用类型(zval.v.type=IS_REFERENCE,即 $a=&$b)时,赋值一定会用到引用计数
    变量是普通的数组,赋值时也会用到引用计数,变量是 IS_ARRAY_IMMUTABLE 时,赋值不使用引用计数
    当字符串的refcount>1时,也就是多个变量引用同一块内存值,对其中的一个变量修改,会触发写时分离,保证了各变量间的独立性。

    4.3.2 字符串的类别(内部字符串)
    PHP源码为了实现对特殊字符串的管理,会给字符串分类,实现方式就是用zend_string结构体里面的gc.u.flags字段,gc.u.flags总共有8位,每个类别占一位。
    1)对于临时的普通字符串,flags字段被标识为0
    2)对于内部字符串,用于存储PHP代码中的字面量、标识符等,flags 字段被标识成 IS_STR_PERSISTENT|IS_STR_INTERNED
    3)对于 PHP 已知字符串,flags 字段会被标识成 IS_STR_PERSISTENT|IS_STR_INTERNED|IS_STR_PERMANENT

    字面量:代码中写死的变量值,比如整型字面量、字符串字面量等。「hello」
    标识符:指的变量名、函数名、方法名、类名等
    PHP已知字符串:保留字(this、class等),超全局数组-GLOBALS,_GET,_POST,内部函数名,内部类名,扩展函数名等
    保留字:无法用作函数名、类名等关键字。如,class、public等