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

关于构造函数私有方法

http://img1.sycdn.imooc.com//58856e8e0001fd1403740462.jpg

我看不懂self::$_object = new Car();

新建一个对象,赋值给一个静态变量?

正在回答

1 回答

个人理解,静态变量也是变量,与动态变量的作用一样,存储信息等,当然也有自己的特性,比如,在类中,静态的成员,可以在类未实例化之前就能使用,也就是说可以使用类名调用。结合单例设计模式,为了不让用户直接实例化对象,需要将构造函数隐藏,但是,我们还是需要能够创建对象,这个时候就需要提供一个函数,这个函数不用对象也能调用, 也就是说能用类名调用, 我们知道静态函数是不能访问非静态成员的, 那么就需要一个静态变量保存这个类的实例,如果这个值是空,就实例化一个对象并赋值给他,否则直接返回该值,保证在运行期间此类只有一个对象存在。大神勿喷。


0 回复 有任何疑惑可以回复我~
#1

怀中猫 提问者

我还有两个疑惑,1:我没见过new Car()赋值给不是对象的用法,可以再详细说明下吗?赋值给静态变量,具体赋了什么值,这个值和普通建立一个对象有什么区别?2:那在类里面实例化对象和外面实例化对象有什么区别呢?应该不仅仅是里面可以用静态方法吧?按照图里的调用,结果应该(我猜测)只输出一次"object create",就是说类里面的new Car()实际上是不会调用构造函数的。
2017-01-23 回复 有任何疑惑可以回复我~
#2

_pkm_ 回复 怀中猫 提问者

php是松类型的语言,不像c++,java,需要 Object obj = new Object();的方式去实例化对象,你给变量什么值,他就是什么类型,你可以使用gettype(var_name);查看他的类型,1,所以这里new Car();赋值给变量,那个变量就是object的类型.2,类外类里面实例化没有区别,如果构造函数是私有的,就只能在类内部才能调用.3,单例模式下,构造函数只会调用一次,本例子"object create"只会输出一次,这次就是调用的构造函数。4,只要成员是公有的,不管是不是静态,内部外部都能调用。
2017-01-23 回复 有任何疑惑可以回复我~
#3

怀中猫 提问者

谢谢大神耐心讲解!
2017-01-23 回复 有任何疑惑可以回复我~
#4

_pkm_ 回复 怀中猫 提问者

我也是新手。相互学习,不客气啦
2017-01-23 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181826    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

关于构造函数私有方法

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信