Re: Re: [RFC] Deprecations for PHP 7.2

From: Date: Sun, 11 Dec 2016 10:29:18 +0000
Subject: Re: Re: [RFC] Deprecations for PHP 7.2
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-97354@lists.php.net to get a copy of this message
"Nikita Popov" wrote in message news:CAF+90c91SPFOHiTJGpwTEvZt_Wyk+hTX4-TANTMsshhcTQQVfw@mail.gmail.com...
On Sat, Nov 19, 2016 at 11:18 AM, Tony Marston <TonyMarston@hotmail.com> wrote:
"Nikita Popov" wrote in message news:CAF+90c8Wox0wadAVPsP83er= G9jbW__26yBWOFAsjB09rYVFJA@mail.gmail.com...
Hi internals! I've submitted this RFC for PHP 7.1 previously, but didn't follow through due to time constraints. Now I'd like to propose an extended version for PHP 7.2 and vote on it sooner rather than later to avoid a repeat performance. https://wiki.php.net/rfc/deprecations_php_7_2 The RFC combines a number of deprecation and removal proposals. Each one will get a separate 2/3 majority vote. The RFC overlaps with some recently discussed topics (each, binary strings) -- I'm fine with dropping these if someone has a more specific RFC. I expect some of these are no-brainers, while others are more controversial -- please share your specific concerns. Thanks, Nikita
I am against the removal of the $errorcontext argument of error handler as this has been a valuable part of my error handler for over ten years. Whenever trigger_error() is called with a fatal error I write all available details to a log file as well as sending an email. In order to obtain additional data I use errorcontext to determine the following: a) Was it called from a function or an object? For this I use code such as the following: if (isset($errcontext['this']) AND is_object($errcontext['this'])) { b) If it was called from an object, was it one of my database objects? If yes, then obtain some extra information using code such as the following:
       // retrieve error details from DML object
       if (method_exists($errcontext['this'], 'getQuery')) {
           $query  = $errcontext['this']->getQuery();
       } // if
       if (method_exists($errcontext['this'], 'getErrorNo')) {
           $errno  = $errcontext['this']->getErrorNo();
       } // if
       if (method_exists($errcontext['this'], 'getErrorString')) {
           $errstr = $errcontext['this']->getErrorString();
       } // if
       if (method_exists($errcontext['this'], 'getErrorString2')) {
           $errstr2 = $errcontext['this']->getErrorString2();
       } // if
I'm afraid you're out of luck here :/ This usage will no longer be possible as of PHP 7.1 -- independently of the deprecation proposed in this RFC. See: https://3v4l.org/sQBL9 Prior to PHP 7.1 $this was *sometimes* included in the symbol table (to be more precise, whenever $this was used as a CV, rather than implicit UNUSED operand). As of PHP 7.1 $this is never included in the symbol table. This change is due to https://wiki.php.net/rfc/this_var. But! This functionality is still available through debug_backtrace(). That's the correct way of fetching the $this of a parent frame, which should always work (rather than *sometimes* on PHP < 7.1), and is independent of the error handling mechanism.
The RFC does not specify this, it simply says "use a proper debugger". Will I still be able to use debug_backtrace() to obtain the same information that is available in $errorcontext?If so, this should be explicitly stated in the RFC.
So, to clarify: Is $this the only thing from the error context you're interested in? Or do you also use all the other variables?
I use all the other variables as well, but sometimes I need to use $errorcontext to supply additional information -- Tony Marston

« previous php.internals (#97354) next »