Heya, While I agree that it is weird to be able to call constructors more than once, this is generally used for:
* lazy loading * resource reset Specifically, what is going on is something like following:<?php final class DbConnection { private $dsn; private $initializer; public function __construct(string $dsn) { $this->dsn = $dsn; // socket stuff happens here, much like with PDO } public function query(string $queryString) : array { ($this->initializer)(); // irrelevant from here on return ['query' => $queryString, 'dsn' => $this->dsn]; } public static function lazyInstance(string $dsn) : self { $instance = (new ReflectionClass(self::class))->newInstanceWithoutConstructor(); $instance->initializer = function () use ($dsn, $instance) { $instance->__construct($dsn); $instance->initializer = function () { }; }; return $instance; } } $instance = DbConnection::lazyInstance('mysql://something'); var_dump($instance); var_dump($instance->query('SELECT * FROM foo')); var_dump($instance->query('SELECT * FROM bar')); Here's an example of it at work: https://3v4l.org/Y0eoL The pattern is simple: * intercept constructor call * capture constructor parameters * instantiate without constructor * defer constructor call for later The same can be used in a myriad of different ways, but this is a legit use-cases that generally don't involve coding everything into the same class (and I generally advise against doing that anyway). Therefore I don't see a reason to drop manual constructor calls, unless there is a strong necessity to get rid of 'em. Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/ On Thu, Jan 12, 2017 at 8:11 AM, Tim Bezhashvyly <tim.bezhashv...@gmail.com> wrote: > Dear internals, > > I would like to propose 2 RFCs: > > - Disallow explicit call of __construct method > - Polymorphic dispatch > > I'm sure I'm not the first who came with those 2 ideas so in case those > were already proposed and rejected just let me know. > > Otherwise please bless me with mana which will allow me to submit them. > > Regards, > Tim > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > >