Why can't I overload constructors in PHP?

后端 未结 14 904
长情又很酷
长情又很酷 2020-12-04 11:30

I have abandoned all hope of ever being able to overload my constructors in PHP, so what I\'d really like to know is why.

Is there even a reason for it? Doe

相关标签:
14条回答
  • 2020-12-04 12:02

    I'm really no OOP expert, but as I understand it overloading means the ability of a method to act differently depending in the parameters it receives as input. This is very much possible with PHP, you just don't declare the input types since PHP does not have strong typing, and all the overloading is done at runtime instead of compile time.

    0 讨论(0)
  • 2020-12-04 12:04

    they say this work:

    <?php
    class A
    {
        function __construct()
        {
            $a = func_get_args();
            $i = func_num_args();
            if (method_exists($this,$f='__construct'.$i)) {
                call_user_func_array(array($this,$f),$a);
            }
        }
    
        function __construct1($a1)
        {
            echo('__construct with 1 param called: '.$a1.PHP_EOL);
        }
    
        function __construct2($a1,$a2)
        {
            echo('__construct with 2 params called: '.$a1.','.$a2.PHP_EOL);
        }
    
        function __construct3($a1,$a2,$a3)
        {
            echo('__construct with 3 params called: '.$a1.','.$a2.','.$a3.PHP_EOL);
        }
    }
    $o = new A('sheep');
    $o = new A('sheep','cat');
    $o = new A('sheep','cat','dog');
    
    // results:
    // __construct with 1 param called: sheep
    // __construct with 2 params called: sheep,cat
    // __construct with 3 params called: sheep,cat,dog
    ?>
    

    and, it seem every one are happy with it, but for me it didn't work... if you get it to work, its one kind of overloading too...

    it take all argoments and pass them to the secondary function constructor...

    0 讨论(0)
提交回复
热议问题