是否可以在一个php类中使用两个构造函数?

时间:2015-04-22 12:00:24

标签: php overloading

是否可以在单个php类中使用两个构造函数,如:

class php{

   // first constructor
   function __construct(){

   }

   // second constructor             
   function __construct(){

   }

}

3 个答案:

答案 0 :(得分:1)

当我需要模拟重载时,我会使用特殊参数来命令处理。例如,以下行为类似于具有4种变体的函数:

function read(&$bytes = null, $off = 0, $len = 0)
{
    // Simply checking for null is not useful for references,
    // A value created as a parameter will be null, but the number
    // of arguments will still exist, check the argument count instead
    // of the default values.
    if (0 === func_num_args()) {
        // Equals: read();
    }

    $off = (int) $off;
    $end = min($off + $len, $this->length) ? $this->length;
    // Equals: read($b, $i, $l);
}

以上模仿:

function read();

function read(&$bytes);

function read(&$bytes, $off);

function read(&$bytes, $off, $len);

答案 1 :(得分:0)

您不能拥有两个构造函数,但您可以使用可选参数来实现相同的功能。像这样:

class Example {

    function __construct($param = null) {
        if ($param === null) {
           // First case
        } else {
           // Second case
        }
    }

}

答案 2 :(得分:-3)

在一个类中定义多个构造函数是不可能的.. 如下定义

class Example {

   function __construct(){

   } // this is for the first construct

   function __construct(){

   } //this is for the second construct

}

那么,您如何知道首先调用哪个构造函数?