> Perhaps there should be a new rule which says that invoking a constructor 
> with anything other than "new" or "parent::__contruct()"
> should be illegal, in which case this situation would generate an error.

Now this would break a lot of code that $obj->__construct(); or
$this->__construct();  And I've seen a lot of it.

2015-01-18 9:33 GMT-03:00 Tony Marston <tonymars...@hotmail.com>:
> "Andrea Faulds"  wrote in message
> news:d554c8b8-0bfb-44f7-b23e-8bfc12ae2...@ajf.me...
>>
>>
>> Hey Rowan,
>>
>>> On 17 Jan 2015, at 19:40, Rowan Collins <rowan.coll...@gmail.com> wrote:
>>>
>>> On 17/01/2015 18:33, Todd Ruth wrote:
>
>
> <<snip>>
>
>
>>> I don't think using __construct over named-method for constructors really
>>> has anything to do with "OOP fundamentalism"; it was a design change to make
>>> certain things simpler (like parent::__construct), and more consistent (all
>>> reserved magic methods begin with __, so any method not beginning with that
>>> is safe to use however you like).
>>
>>
>> To add on to what you said, there’s also a quite important benefit that
>> __construct is a lot more obvious in what it does.
>>
>> Looking at the following code:
>>
>> class Foo {
>>    public $foo,
>>           $bar,
>>           $qux;
>>    public function foobar() {
>>        // ...
>>    }
>>    public function bar() {
>>        // ...
>>    }
>>    public function foo() {
>>        // ...
>>    }
>>    public function baz() {
>>        // ...
>>    }
>>    public function qux() {
>>        // ...
>>    }
>> }
>>
>> It’s not easy to spot the constructor at a glance, and it’s very easy to
>> miss.
>>
>> Compare that to the following:
>>
>> class Foo {
>>    public $foo,
>>           $bar,
>>           $qux;
>>    public function foobar() {
>>        // ...
>>    }
>>    public function bar() {
>>        // ...
>>    }
>>    public function __construct() {
>>        // ...
>>    }
>>    public function baz() {
>>        // ...
>>    }
>>    public function qux() {
>>        // ...
>>    }
>> }
>>
>> Far more obvious.
>
>
> If a developer cannot read valid code then it is a developer problem. It is
> not up to the language to dictate style - it provides the functions and
> features while style and readability are the sole responsibility of the
> individual developer.
>
>> This actually tripped me up on more than one occasion when updating tests
>> broken by the removal of PHP 4 constructors in php-src.
>
>
> Perhaps this issue can be solved by the RFC on Default Constructors? See
> https://wiki.php.net/rfc/default_ctor
>
>> Sure, the constructor should probably be the first method, but *even if it
>> is* it’s still nowhere near as obvious in PHP 4 style.
>>
>> Similarly, what does the following do?
>>
>>    $this->foo();
>>
>> It looks like a normal method call, and it is in a sense. But if you’re in
>> Bar and inheriting from Foo, that’s a call to the parent class’s
>> constructor!
>
>
> Perhaps there should be a new rule which says that invoking a constructor
> with anything other than "new" or "parent::__contruct()" should be illegal,
> in which case this situation would generate an error.
>
>> The following is much more obvious:
>>
>>    parent::__construct();
>>
>> I think it’s pretty clear why we changed to PHP5-style constructors.
>> They’re just a lot more recognisable. :)
>> --
>> Andrea Faulds
>> http://ajf.me/
>>
>>
>>
>
> --
> Tony Marston
>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to