从PHP5开始,对面向对象的支持开始进入实质阶段,由于要保持向下兼容,所以在使用的过程中会碰到一些问题非常有趣的问题。今天在学习的过程中看到书中有一个提示:PHP4中构造方法是一个与类同名的方法,而从PHP5开始,用__construct()做为构造方法,但仍然支持PHP4的构造方法。我就想到一个问题:如果这两种类型的构造方法同时出现在一个类中,结果会如何。下面通过一个测试来看看会发生怎样的状况:
三、总结 | Summary
<正文结束>
一、PHP4类型构造方法在前,PHP5类型构造方法在后
1、源代码:2、执行:。<?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;
}
}
?>
$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、源代码:2、执行:。<?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;
}
}
?>
$people = new People();
会正常执行,且可以调用:$people->People();
三、总结 | Summary
- __construct()在前面时,碰到与类同名的构造方法时,不做处理,将其作为普通方法对待;
- 与类同名的构造方法在前面时,在碰到__construct()构造方法时,优先将__construct()作为构造方法,同时提示用户。
<正文结束>