Re: Old style constructors in PHP-8
| From: | Andreas Heigl | Date: | Wed, 30 Jan 2019 15:38:33 +0000 |
| Subject: | Re: Old style constructors in PHP-8 | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-103897@lists.php.net to get a copy of this message | ||
Am Mittwoch, den 30.01.2019, 09:30 -0600 schrieb Larry Garfield:
> On Wednesday, January 30, 2019 5:41:45 AM CST Nikita Popov wrote:
> > On Wed, Jan 30, 2019 at 12:11 PM Dmitry Stogov <dmitry@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.
>
> Every Drupal 7 or 8 site includes classes that have a method name the
> same as
> the class name, on the assumption that it's safe to do for a normal
> method in
> current PHP versions. Making that suddenly a Fatal would be, er,
> bad. :-)
>
> As others have noted, this is easily solved with static analysis
> tools.
> There's been discussion of WP moving to a PHP 7-based version of PHP
> sometime
> this year (no promises, but that's the scuttlebutt), which would let
> them
> convert to __construct() universally and safely well before PHP 8
> becomes an
> issue.
AFAIK WP requires PHP5 already as the minimum PHP-Version. And AFAIK
__construct worked with that as well. So there should be no need to
wait for PHP7 readiness in WordPress to tackle this issue.
Replacing the function-name-as-class-name constructors with __construct
should be possible without a BC-break already. Even with PHP 5.0 as a
min-requirement.
Or am I missing something?
Cheers
Andreas
,,,
(o o)
+--------
-------------------------------------------------ooO-(_)-Ooo-+
| Andreas
Heigl |
| mailto:
andreas@heigl.org N 50°22'59.5" E 08°23'58" |
|
http://andreas.heigl.org http://hei.gl/wiFKy7 |
+-
--------------------------------------------------------------------+
|
http://hei.gl/root-ca
|
+-
--------------------------------------------------------------------+
Attachment: [application/pgp-signature] This is a digitally signed message part signature.asc
Attachment: [application/pgp-signature] This is a digitally signed message part signature.asc