php的类里可以有两个构造函数?
class ecs_error
{
var $_message = array();
var $_template = '';
var $error_no = 0;
/**
* 构造函数
*
* @access public
* @param string $tpl
* @return void
*/
function __construct($tpl)
{
$this->ecs_error($tpl);
}
/**
* 构造函数
*
* @access public
* @param string $tpl
* @return void
*/
function ecs_error($tpl)
{
$this->_template = $tpl;
}
已经有了一个__construct(), 还有一个跟类名同名的构造函数ecs_error();
为什么要有两个构造函数?是为了匹配不同的版本吗?
回复内容:
class ecs_error
{
var $_message = array();
var $_template = '';
var $error_no = 0;
/**
* 构造函数
*
* @access public
* @param string $tpl
* @return void
*/
function __construct($tpl)
{
$this->ecs_error($tpl);
}
/**
* 构造函数
*
* @access public
* @param string $tpl
* @return void
*/
function ecs_error($tpl)
{
$this->_template = $tpl;
}
已经有了一个__construct(), 还有一个跟类名同名的构造函数ecs_error();
为什么要有两个构造函数?是为了匹配不同的版本吗?
应该是的,PHP4 是用的同名函数做构造函数,而 PHP5 用的是 __construct
,具体请参考:
http://php.net/manual/zh/language.oop5.decon.php
http://php.net/manual/zh/oop4.constructor.php
应该不是吧,里面的语句都不一样,至于为啥这么写就不知道了
php4 沿袭 C++ 以类名的同名函数作为构造函数
php5 新增了 __construct 作为构造函数
由于你的类属性定义是 php4 风格的,所以可认为这个类是在 php4 基础上的扩展
并非向下兼容,而是画蛇添足
这个是为了兼容
在php4中构造函数采用与类同名的方式进行定义
在php5中构造函数采用__construct定义
在php4中不识别__construct,不影响程序正常运行
在php5中,当二者同时存在时,__construct优先
关于php的一些知识可以看下视频教程的,很多应该都有讲到
v8视频 有很多编程方面的视频教程 v8视频
上一篇: Laravel学习笔记
推荐阅读
-
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
-
C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载
-
c++类模板的声明与调用,与普通模板函数的区别,类模板可以有默认的参数
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析_php实例
-
解决PHP4.0 和 PHP5.0类构造函数的兼容问题_PHP
-
php-PHP 一个类里能直接调用类外部的函数吗?为什么
-
PHP里同一个种里的两个方法可以相互调用吗
-
【php】利用php的构造函数与析构函数编写Mysql数据库查询类
-
php中类的构造函数参数有关问题
-
看过google的搜索吗搜索共花了多少时间这里有一个类可以统计脚本执行时间的。_PHP教程