java-PHP5的类实例变量的声明问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-PHP5的类实例变量的声明问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1656字,纯文字阅读大概需要3分钟。
内容图文
private $db = new Db();
如上,在php5的类中,如果直接声明一个实例变量,就会报类声明错误
改成下面这样就可以
private $db = null;
public function __construct(){
$this->db = new Db();
}
非得先声明一个空值,再用方法赋值,搞的常常写出来查半天发现没bug,才明白原来是语法要求。
不明白是基于什么考虑,我理解,可能是php5学习面象对象学的还不完善,所以有很多问题,大伙聊聊。
补问:PHP7还是这样吗?
鸟哥,求撸 @Laruence
.
回复内容:
private $db = new Db();
如上,在php5的类中,如果直接声明一个实例变量,就会报类声明错误
改成下面这样就可以
private $db = null;
public function __construct(){
$this->db = new Db();
}
非得先声明一个空值,再用方法赋值,搞的常常写出来查半天发现没bug,才明白原来是语法要求。
不明白是基于什么考虑,我理解,可能是php5学习面象对象学的还不完善,所以有很多问题,大伙聊聊。
补问:PHP7还是这样吗?
鸟哥,求撸 @Laruence
.
因为如果允许private $db = new Db();
这样的语法,那么,文件被加载后,Db类就被初始化了。
请注意,是A类被载入内存,Db类就被实例化了。
而如果Db类也用了同样的语法,那么可能你include一个文件,就会很慢,因为include的同时,就在进行一系列的类实例化行为。
而禁用这种特性,只允许在类构造方法中实例化其他类,就能很好的控制类实例化的流程了。加载类时,永远不会产生附带的类实例化。
无论对于系统的优化,还是对于程序运行时间的掌控,可预测、可控的,才是好的、可持续的。
PHP暂时未提供对对象属性直接赋值对象的支持,对象的赋值暂时只能通过构造函数来实现。
当然,你不能说php要向java去学习面向对象,也没有谁规定java才是面向对象的标杆,如果php真的样样都和java一样了,那它干嘛还叫php呢。
补答:PHP7依然是这样。
class的直接赋值只能是 标量 (数值,字符串,数组,布尔)
谢谢邀请。楼上回答就很到位
都是大神 在函数外面直接实例化类没做过,但是你的第二种写法两个db不是同一个变量吧
内容总结
以上是互联网集市为您收集整理的java-PHP5的类实例变量的声明问题全部内容,希望文章能够帮你解决java-PHP5的类实例变量的声明问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。