PHP 类的静态成员变量和普通成员变量对比
来源:互联网 发布:淘宝 二手 编辑:程序博客网 时间:2024/05/02 01:36
有很多人可能弄不清楚,在PHP中类的静态成员变量和普通成员变量有什么区别?
1、类的静态方法只能访问静态成员变量,而不能访问非静态成员变量
2、静态成员变量不需要实例化就能访问,且访问速度快一些
3、类的静态成员变量只属于这个类,但类的所有实例共享这个静态成员变量
一个由 c/c++编译过的程序占用的内存分为一下几个部分
(1)、栈区 stack :
由编译器自动分配释放,存放函数的参数值,局部变量的值等。这个栈的操作方式类似于数据结构中的栈。栈区是在程序运行前就会分配好的,速度较堆要快
(2)、堆区 heap :
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式类似于链表。是在程序运行时动态分配的,速度较栈慢
(3)、全局区(静态去)static :
全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量又放在相邻的另一块区域中。程序结束后由系统释放。
(4)、文字常量区 :
常量字符串放在这里。程序结束后由系统释放。
(5)、程序代码区 :
存放函数体的2进制代码。
下面咱们一起来做个小例子:
class A{ public static $a = 5; public $b = 4; public function getA(){ return A::$a; } public function setA($val){ A::$a = $val; } public function getB(){ return $this->b; } public function setB($val){ $this->b = $val; } public static function getbb(){ return $this->a; }}
$a = new A();echo $a->getA();$a->setA('aaaa');echo '<br/>';$b = new A();echo $b->getA();echo '<br/>';$c = new A();echo $c->getA();上面的执行结果会是:5 aaaa aaaa
类的对象$a将类的静态成员变量值修改后,由于类的所有实例对象共享静态成员变量,所以其他对象在获取静态成员变量值时就会发生改变。
$a = new A();echo $a->getB();$a->setB('aaaa');echo '<br/>';$b = new A();echo $b->getB();
上面的执行结果是:4 4
echo A::getbb();
会发生报错,因为类的静态方法只能访问静态成员变量
相信看到这里大家应该会明白了吧!
错误之处欢迎指出!
0 0
- PHP 类的静态成员变量和普通成员变量对比
- ThreadLocal成员变量和普通的成员变量对比
- 静态成员变量和非静态成员变量的对比
- 类中静态成员变量和普通成员变量的区别
- 静态类成员函数无法访问普通的成员变量
- 静态成员变量与普通成员变量的区别
- PHP静态成员变量和非静态成员变量
- PHP静态成员变量和非静态成员变量
- PHP静态成员变量和非静态成员变量
- php 静态成员变量
- 类的静态成员函数和静态成员变量
- 25-类的静态成员变量和静态成员函数
- 普通成员变量与静态成员变量的区别、普通成员方法与静态成员方法的区别
- 类的 静态成员 --- 静态成员变量 、 静态成员函数
- Python的静态成员变量和非静态成员变量
- 静态成员变量和非静态成员变量的区别
- 静态变量与普通成员变量区别
- 成员变量和静态变量的区别?
- Spring2.5学习1.1_bean配置及其Spring容器的实例化
- IBM UrbanCode Deploy的可伸缩部署
- 绿色软件有什么特征?
- 数据库事务中获取自增ID
- (编程训练)再回首,数据结构——顺序表上的编程训练
- PHP 类的静态成员变量和普通成员变量对比
- MFC六大关键技术之仿真学习笔记(一)
- spring mvc 上传时 org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework
- 【swift】15-0528 函数参数
- Linux 开发环境搭建与使用——SlickEdit 的安装与配置
- 泛函编程(27)-泛函编程模式-Monad Transformer
- 解决PowerDesigner的association按钮不能使用的问题
- Paoding Rose使用手册
- TextView 加中划线,下划线,抗锯齿,取消设置的线