Php 3.x与4.x中关于对象编程的不兼容问题之一 构造器说 (转)

本文探讨了PHP从3.x到4.x版本中构造器的变化,特别是构造器函数的定义与调用方式的不同,以及这些变化如何影响类的继承行为。
Php 3.x与4.x中关于对象编程的不兼容问题之一 构造器说 (转)[@more@]

PHP 3.x与4.x中关于对象编程的不兼容问题

  “面向对象”听起来是个很流行的词汇,似乎到了如果你还没有oop,那不如回家种白菜的地步。
  Php从版本3.x开始支持对象编程,虽然它的Class从一开始就饱受程序员们的指责,但它的确给我们带来了意外的惊喜。一路跌跌撞撞走来,到了4.x,Php已经相当OOP了。当然,它对于类变量的处理依然不能让人满意,没有私有、公有、保护、静态的声明方法。Php面向对象的可用性不在本文讨论范围内。
  伴随着4.x中关于对象编程的完善,Php team给我们带来了些许“麻烦”:3.x和4.x中关于对象编程的一些游戏规则改变了,不兼容。笔者就实际开发过程遇到的问题稍作讨论,相信有些问题可能笔者尚未遇到,欢迎诸位补充、共赏。

一、构造器(函数)说
  在3.x中,构造器指的是与类同名的类函数。有点拗口,不过更拗口的还有。在4.x中,构造器指的是在构造器内部直接定义的与类同名的类函数,就是说不包括继承来的类函数。比如:
1、 

  class ABabyStudio
  {
    function ABabyStudio(){
  echo('call constructor'.chr(13));
  }
  //...
  }

注释:
  在3.x和4.x中效果相同
2、

  class ABaby
  {
  function ABabyStudio(){
  echo('ABabyStudio');
  }
  }
  class ABabyStudio
  {
  //...
  }

注释:
  在3.x中类ABabyStudio有构造器,从父类ABaby继承获得;在4.x中将没有构造器。读者可试运行这样一行代码
  $ABabyStudio=new ABabyStudio();
  在3.x版本中应该会输出“ABabyStudio”,而4.x中则不会输出。

  还有一点值得注意的是,在4.x中规定实例化一个对象时,只能为类变量指定常量值(或称作标量值)作为初始值。如果想要通过变量(通常是全局变量)、对象、表达式设定初始值,应该在构造器中进行操作。比如:
3、

  class ABaby
  {
  //...
  }
  class ABabyStudio
  {
  var $ababy='hello every one';  //sentence 1
  var $ababy='hello'.' world ';  //sentence 2
  var $ababy=new ABaby();  //sentence 3
  var $ababy=array();  //sentence 4
  var $ababy=g_hello;  //sentence 5,g_hello is a constant
  function ABabyStudio(){
  echo('call constructor'.chr(13));
  }
  //...
  }

注释:
  5个标示的sentence只有1、4、5可以在4.x下通过。不过,笔者没有了解Php工作组为什么让sentence 4通过,只能强迫自己理解为:array被作为一种基本数据类型,array()不被看作方法或表达式。

4、

  class ABaby
  {
  //...
  }
  class ABabyStudio
  {
  var $ababy;
  function ABabyStudio(){
  $this->ababy='hello every one';
  $this->ababy='hello'.' every'.' one';
  $this->ababy=new ABaby();
  $this->ababy=array();
  $this->ababy=g_hello;
  echo('call constructor'.chr(13));
  }
  //...
  }

注释:
  这段代码在3.x和4.x都能够编译通过,效果相同。
  在3.x和4.x中,关于构造器规则的变化的说明驻足于此。下一篇将介绍按引用传递参数的不兼容问题。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-997861/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-997861/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值