Re: Explicit constructor call and polymorphic dispatch
| From: | Fleshgrinder | Date: | Sat, 14 Jan 2017 10:03:56 +0000 |
| Subject: | Re: Explicit constructor call and polymorphic dispatch | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-97748@lists.php.net to get a copy of this message | ||
On 1/13/2017 8:24 AM, Wes wrote:
>>
>> I am baffled that this (still) works:
>>
>
> __clone was special cased in 5.x, but special case was removed in 7.0
> means that previously you couldn't do publicly $obj->__clone(); now you can
> and, yes, it's as dangerous as it looks
> however, the special case was removed for a reason that i'm sure is a good
> one, and i'm certain the same good reason is also valid for __construct
>
What is the reason?
On 1/13/2017 8:24 AM, Wes wrote:
>> the only reason for prohibiting explicit __construct calls is that it makes
>> PHP objects mutable
>
>
> then don't call it explicitly, exactly like you wouldn't use reflection to
> call private methods
>
This is one possible answer to this issue. The question is whether PHP
wants to protect developers from errors and help reduce bugs by
enforcing things or wants to be a purely convention based language and
leave it developers to use it correctly.
I am completely in favor of #1 and you seem to be in favor of #2.
I actually have the impression that it is not defined which of both PHP
actually is or wants to be. The introduction of scalar type hints in PHP
7 definitely points towards #1 but it could just be an outlier.
--
Richard "Fleshgrinder" Fussenegger