PHP面向对象之构造方法定义 | PHP object-oriented definition of the constructor

PHP学习笔记 - PHP面向对象之构造方法定义 | PHP object-oriented definition of the constructor  

2011-07-22 18:30:37|  分类: php |  标签:php  构造方法  |字号 订阅

从PHP5开始,对面向对象的支持开始进入实质阶段,由于要保持向下兼容,所以在使用的过程中会碰到一些问题非常有趣的问题。今天在学习的过程中看到书中有一个提示:PHP4中构造方法是一个与类同名的方法,而从PHP5开始,用__construct()做为构造方法,但仍然支持PHP4的构造方法。我就想到一个问题:如果这两种类型的构造方法同时出现在一个类中,结果会如何。下面通过一个测试来看看会发生怎样的状况:

一、PHP4类型构造方法在前,PHP5类型构造方法在后

1、源代码:
<?php
class People {
    
     private  $name;
    
     private  $age;
    
     function People() {
         echo  "call construct method 'People'";
        $this-> age = 0;
    }

     function __construct() {
         echo  "call construct method '__construct'";
        $this-> age=20;
    }

     public function setName($name) {
        $this-> name = $name;
    }
    
     public function getName() {
        return $this-> name;
    }
    
     public function setAge($age) {
        $this-> age = $age;
    }
    
     public function getAge() {
         return $this-> age;
    }
}
?>
2、执行:。
 $people =  new People();
第一次调用会报错: Strict Standards: Redefining already defined constructor for class People in /home/aofeng/local/nginx-0.7.68/html/object/Pepole.php on line 13
后续调用就恢复正常。
并且只会执行构造方法__construct()而略过构造方法People()。

二、PHP5类型构造方法在前,PHP4类型构造方法在后

1、源代码:
<?php
class People {
    
     private  $name;
    
     private  $age;
    
function __construct() {
         echo  "call construct method '__construct'";
        $this-> age=20;
    }

     function People() {
         echo  "call construct method 'People'";
        $this-> age = 0;
    }

     public function setName($name) {
        $this-> name = $name;
    }
    
     public function getName() {
        return $this-> name;
    }
    
     public function setAge($age) {
        $this-> age = $age;
    }
    
     public function getAge() {
         return $this-> age;
    }
}
?>
2、执行:。
 $people =  new People();
会正常执行,且可以调用:$people->People();

三、总结 | Summary

  • __construct()在前面时,碰到与类同名的构造方法时,不做处理,将其作为普通方法对待;
  • 与类同名的构造方法在前面时,在碰到__construct()构造方法时,优先将__construct()作为构造方法,同时提示用户。


<正文结束>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值