phpoopoverloadingconstructor

Why can't I overload constructors in PHP?


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? Does it create inherently bad code? Is it widely accepted language design to not allow it, or are other languages nicer than PHP?


Solution

  • You can't overload ANY method in PHP. If you want to be able to instantiate a PHP object while passing several different combinations of parameters, use the factory pattern with a private constructor.

    For example:

    public MyClass {
        private function __construct() {
        ...
        }
    
        public static function makeNewWithParameterA($paramA) {
            $obj = new MyClass(); 
            // other initialization
            return $obj;
        }
    
        public static function makeNewWithParametersBandC($paramB, $paramC) {
            $obj = new MyClass(); 
            // other initialization
            return $obj;
        }
    }
    
    $myObject = MyClass::makeNewWithParameterA("foo");
    $anotherObject = MyClass::makeNewWithParametersBandC("bar", 3);