Maison > développement back-end > tutoriel php > php的类里可以有两个构造函数?

php的类里可以有两个构造函数?

WBOY
Libérer: 2016-06-06 20:39:57
original
1690 Les gens l'ont consulté

<code>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;
    }
</code>
Copier après la connexion
Copier après la connexion

已经有了一个__construct(), 还有一个跟类名同名的构造函数ecs_error();
为什么要有两个构造函数?是为了匹配不同的版本吗?

回复内容:

<code>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;
    }
</code>
Copier après la connexion
Copier après la connexion

已经有了一个__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视频

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal