注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

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

2011-07-22 18:30:37|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
从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()作为构造方法,同时提示用户。


<正文结束>

文章声明


作者:傲风(aofengblog@163.com)       编写时间:2011年07月22日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容!

  评论这张
 
阅读(2187)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017