为了账号安全,请及时绑定邮箱和手机立即绑定

单例模式中的普通成员属性相当于静态属性吗?

单例模式中的普通成员属性相当于静态属性吗?

沧海一幻觉 2019-03-30 11:35:21
classUrl{privatestatic$instance=null;public$urls=array();publicstaticfunctiongetInstance(){if(empty(self::$instance)){self::$instance=newself();}returnself::$instance;}publicfunctionset(){$this->urls=array(0,1,2,3,4,5);}}//单例$instance=Url::getInstance();//给普通成员属性赋值$instance->set();print_r($instance->urls);//以后每次取都有值print_r($instance->urls);//同上print_r($instance->urls);//同上
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

分两个层面
使用效果:二者是一致的,可以说“相当于”
堆栈结构:完全不同
单例是通过运行时代码保障只有一个实例,其所有成员变量都在实例空间内,落在堆区,但是对于代码执行系统(php解释器、jvm)来说,它并不一定是单例的,通过反射机制,你可以突破单例限制创建出一个新的实例。和原来的实例存放在堆区不同的地方,操作其中一个实例的成员变量,不影响另一个。
而非单例的静态成员,和所有类的方法定义,属于对于类(而不是实例)来说固定不变的内容,统统放在方法区,无论如何,你都变不出第二份出来。这个类的所有实例,共享这些静态变量,即使没有实例,也可以直接通过类名来访问。
                            
查看完整回答
反对 回复 2019-03-30
?
www说

TA贡献1775条经验 获得超8个赞

也可以这么认为,因为只有一个实例。
                            
查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信