新手提问,
常量和变量的值一样,也是存在内存中也是存在栈区吗?
为什么会有常量这种东西呢?反正都是存值,直接用变量代替它不久好了。常量和变量运用的典型场合有哪些

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2012-12-13 13:39:17 编辑
      

  2.   

    他的意思可能是声明成 global
      

  3.   

    凑一下热闹$GLOBALS['a']='aa';
    function abc(){
    echo $GLOBALS['a'];
    }
    abc();
      

  4.   

    繼續打醬油
    Define('D','DD');
    $b='bbb';
    $GLOBALS['a']='aa';
    function abc(){
    Global $b;//如果不加入这一行,下边的行一定出错,这就是变量的作用范围了.
    echo $b;
    echo $GLOBALS['a'];
    Echo D; $c='ccc';
    }
    abc();
    Echo D;
    Echo $c;//這行一定出錯,因為$c聲明的時候作用範圍是在function內
      

  5.   

    我刚才自己去找了一下答案。
    在a.php 定义一个常量Define('changliang','123')//在内存的常量区开辟一个新的区域去存储常量值123.
    b.php(a.php和b.php两个文件同属于一个系统)
    echo changliang;在b.php 直接调用常量即可。
    无需再次声明,因为内存的常量区中已经存储了这个值这样理解是否正确?
      

  6.   

    常量的结构定义:
    typedef struct _zend_constant {
    zval value;//常量的值
    int flags; //CONST_PERSISTENT(跨进程持续存在) | CONST_CS(大小写敏感) | CONST_CT_SUBST(允许编译时被替代)
    char *name;//常量名
    uint name_len;//名称长度
    int module_number;//常量模块号,由用户定义的常量,此属性会被初始化为PHP_USER_CONSTANT
    } zend_constant;变量的结构定义
    struct _zval_struct {
    /* Variable information */
    zvalue_value value; //变量值
    zend_uint refcount__gc;   //引用计数,gc会根据此值来决定是否回收内存
    zend_uchar type; //变量类型
    zend_uchar is_ref__gc; //是否是一个引用
    };