一般何种情况下定义常量? 新手提问, 常量和变量的值一样,也是存在内存中也是存在栈区吗? 为什么会有常量这种东西呢?反正都是存值,直接用变量代替它不久好了。 常量和变量运用的典型场合有哪些------解决方案-------------------- 看名字就应该知道一些,一个是可以修改的,一个不能修改的------解决方案-------------------- 关键在于 常量是全局的------解决方案--------------------
本帖最后由 xuzuning 于 2012-12-13 13:39:17 编辑
引用:
版主 变量也可以是全局的呀
是吗?你用用看呀
$a = 123;<br />define('A', 123);<br /><br />function func1() {<br /> echo $a; //Notice: Undefined variable: a<br />}<br />function func2() {<br /> echo A; //123<br />}<br /><br />func1();<br />func2(); Copy after login
------解决方案-------------------- 引用: 本帖最后由 xuzuning 于 2012-12-13 13:39:17 编辑 引用:版主 变量也可以是全局的呀是吗?你用用看呀PHP code?123456789101112$a = 123;define('A', 123); function func1() { echo $a; //Not…… 他的意思可能是声明成 global
------解决方案-------------------- 凑一下热闹
<br />$GLOBALS['a']='aa';<br />function abc(){<br />echo $GLOBALS['a'];<br />}<br />abc();<br /> Copy after login
------解决方案-------------------- 繼續打醬油
<br />Define('D','DD');<br />$b='bbb';<br />$GLOBALS['a']='aa';<br />function abc(){<br /> Global $b;//如果不加入这一行,下边的行一定出错,这就是变量的作用范围了.<br /> echo $b;<br /> echo $GLOBALS['a'];<br /> Echo D;<br /><br /> $c='ccc';<br />}<br />abc();<br />Echo D;<br />Echo $c;//這行一定出錯,因為$c聲明的時候作用範圍是在function內 Copy after login
------解决方案-------------------- 常量的结构定义:
typedef struct _zend_constant {<br /> zval value;//常量的值<br /> int flags; //CONST_PERSISTENT(跨进程持续存在) <br><font color='#FF8000'>------解决方案--------------------</font><br> CONST_CS(大小写敏感) <br><font color='#FF8000'>------解决方案--------------------</font><br> CONST_CT_SUBST(允许编译时被替代)<br /> char *name;//常量名<br /> uint name_len;//名称长度<br /> int module_number;//常量模块号,由用户定义的常量,此属性会被初始化为PHP_USER_CONSTANT<br />} zend_constant; Copy after login
变量的结构定义
struct _zval_struct {<br /> /* Variable information */<br /> zvalue_value value; //变量值<br /> zend_uint refcount__gc; //引用计数,gc会根据此值来决定是否回收内存<br /> zend_uchar type; //变量类型<br /> zend_uchar is_ref__gc; //是否是一个引用<br />}; Copy after login