有很多人可能弄不清楚,在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();

会发生报错,因为类的静态方法只能访问静态成员变量

相信看到这里大家应该会明白了吧!

错误之处欢迎指出!

PHP 类的静态成员变量和普通成员变量对比相关推荐

  1. python静态变量和静态方法_python的静态成员变量、实例成员变量、静态方法、类方法、实例方法...

    标签: 静态成员变量(类变量)和普通成员变量(实例变量) 静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得. 在实例对静态成员变量赋值时,实例 python是动态类型的语 ...

  2. 定义一个抽象的Role类 有姓名 年龄 性别等成员变量 .......

    /** 6:定义一个抽象的"Role"类 有姓名 年龄 性别等成员变量      1. 要求尽可能隐藏所有变量(能够私有就私有,能够保护就不要公有)      再通过GetXXX( ...

  3. java成员变量除了方法传递_JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法...

    类体中的变量分为两部分.变量定义部分定义的变量为类的成员变量,在方法体中定义的变量和方法中涉及的变量称为局部变量. 成员变量和局部变量的区别: (1).成员变量在整个类中都有效,局部变量只在定义它的方 ...

  4. C/Cpp / 类中静态成员变量和普通成员变量的区别

    2017-12-11 创建人:Ruo_Xiao 实例代码: #include <iostream> class CMan { public:CMan() {}~CMan() {} publ ...

  5. [C++] 类的静态成员 (静态数据成员 和 静态成员函数)

    目录 一.声明静态成员: 二.定义静态成员: 三.使用类的静态成员: 四.静态成员类内初始化: 五.静态成员与普通成员的区别: 六.案例代码: 类内的静态成员包括: 静态数据成员 和 静态成员函数. ...

  6. C++类构造函数初始化列表及初始化成员变量的误区

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: [cpp] view plaincopy class CExample { pub ...

  7. java实例成员和类成员变量_Java 中成员变量又分为 和类成员变量。_学小易找答案...

    [简答题]I'm not quite so poetic, but I do know that the subway is as essential to the character of New ...

  8. 类的创建以及使用(成员变量 成员方法)

    面向对象与面向过程思想: 类的组成: 类{ 成员变量(属性): String name://姓名 int age;// 数据类型 变量名称 成员方法(行为) //Tips: 没有关键字static; ...

  9. 封装之--通过类中公有方法访问私有成员变量

    如何在ClassB中访问ClassA的私有成员变量?(典型的封装案例) 通过在ClassA中定义公有的成员方法,然后,在ClassB中通过ClassA的对象调用ClassA中的公有方法,来访问Clas ...

最新文章

  1. jsp内置对象pageContext和config对象
  2. 高中计算机室名言,高中教室励志标语名言
  3. 关于解决安装pwndbg问题sys.stderr.write(f“ERROR: {exc}“) /usr/bin/python3.5: No module named ensurepip
  4. Go语言环境安装,验证go语言环境、使用文本编辑器编写一个go hello world,Go lang IDE安装,在golang中新建一个go程序
  5. 音视频技术开发周刊 | 217
  6. 微信读书vscode插件_vscode 常用的插件
  7. .NET Core很酷,你不得不知
  8. HDU/HDOJ 2612 Find a way 双向BFS
  9. 利用属性观察器实现数据绑定
  10. 第十九章:李丽质入狱
  11. Eclipse的快捷键大全
  12. sql server 约束 查找
  13. E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
  14. jquery_ajax_js,浅析jQuery Ajax通用js封装
  15. Windows XP Nlite 2007珍藏版 BY 丘比特
  16. 读书笔记(一):双脑记
  17. 天然气阶梯是按年还是按月_燃气阶梯是一年一清吗 燃气阶梯的定义
  18. 来了!5G和AI的未来 这10位行业领袖这么说
  19. 什么是PPI,有什么作用?
  20. 阿里飞冰使用教程-前端低代码可视化GUI速开发

热门文章

  1. 太空狼人杀火爆的背后 实时游戏语音有哪些技术难点
  2. java微信小程序旅游管理系统
  3. 趋势预测方法(四)高斯过程回归_时序概率性预测
  4. Flutter Splash闪屏页
  5. 固定资产管理系统软件
  6. 蟑螂恶霸业余学jq+ajax前后交互
  7. 修改已释放的传输请求
  8. 【CF#538div2:C】Trailing Loves (or L'oeufs?)(质因数分解+分析)
  9. 基于Stm32的RFID-RC522模块的对RFID读写使用
  10. GPS定位系统源码,GPSBDpro远程视频监控,实时视频+实时定位