关于类常量与类变量
const DEAL_STATUS_UNTREATED = 0;
const DEAL_STATUS_PROCESSED = 1;
const DEAL_STATUS_NEED_NOT = 2;
const DEAL_STATUS_MAP = [
self::DEAL_STATUS_UNTREATED => '未处理',
self::DEAL_STATUS_PROCESSED => '已处理',
self::DEAL_STATUS_NEED_NOT => '无需处理',
];
以上DEAL_STATUS_MAP $dealStatusMap 都是处理状态的声明,目的都是为了统一公用处理状态,那么这两种形式有什么不同,该用哪一种。 类常量和静态变量都是存储在属于静态存储区,即区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束 区别在于类常量在于初始化后就不能修改,静态变量可以修改;
根据以上特性我们其实可以发现在大多数情况他们是一样的,比如以上情况,他们本质上没有太多的区别。但是针对一些情况,我们需要改变其声明的值并在声明周期内希望起作用,比如我们常用的单例模式。
静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而 auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中始终存在,但是在它作 用域之外不能使用。另外,属于静态存储方式的变量不一定就是静态变量。 例如:外部变量(在PHP中指全局变量)虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。
|