On Wed, Jan 30, 2019 at 12:11 PM Dmitry Stogov <dmi...@zend.com> wrote:
> Hi, > > > I've just noticed that Wordpress-4.1 on PHP master started silently > produce different output. > > The problem that PHP master started to ignore old-style constructors. > > They were deprecated in PHP-7 and PHP produced the following warning > > > Deprecated: Methods with the same name as their class will not be > constructors in a future version of PHP; ... has a deprecated constructor > > > PHP master doesn't produce any warnings and just constructs a class > without constructor. > > This silent behavior change may become a problem for porting legacy code > to PHP-8, > > May be, it makes sense to emit fatal error in case of old-style > constructor. > > > Thanks. Dmitry. > First of all, it is probably important to note that the RFC for this ( https://wiki.php.net/rfc/remove_php4_constructors) explicitly specifies that in PHP 8 methods with the same name as the class are interpreted as ordinary methods and no warning or error is thrown. I've CC'd Levi and Andrea, who authored this RFC. I think as an end goal, what the RFC specifies is preferable for a number of reasons: * You should be able to call your methods whatever you like. PHP only reserves the __ prefix for itself. * The behavior is consistent with classes inside namespaces, where methods with the same name as the class are treated as normal methods for a long time already. * The fact that a method has the same name as the class may be completely incidental if it comes from a trait (see https://bugs.php.net/bug.php?id=77470). The trait does not control in which classes it may be used and which names those classes may have. Of course, porting of legacy code is a legitimate concern. I think the relevant question in that regard is: How likely is it that people will port code directly from PHP 5 to PHP 8, without ever running it on PHP 7, where this generates deprecation notices? Not very, I think. Finally, it should be mentioned that finding old style constructors is trivial with static analysis, and I believe that a lot of code style checker and analyzers already support this functionality since the release of PHP 7.0. Nikita