Hi David,
If you wanted to do this, couldn’t you simply use the following, already:
set_error_handler(
function (int $err_severity, string $err_msg, string $err_file, int
$err_line, array $err_context) {
throw new ErrorException($err_msg, 0, $err_severity, $err_file,
$err_line)
},
E_DEPRECATED
);
?
> On 18 Nov 2016, at 23:18, David Rodrigues <[email protected]> wrote:
>
> Hello.
>
> I like to propose a creation of a new declare() directive that allows
> "emulates a future engine version". And where I say engine I mean PHP
> itself.
>
> -
>
> It should works like it (eg. for engine version "7.0.13"):
>
> declare( {{parameter}} = {{php_version_id}} );
>
> // Examples (one of that):
> declare( engine_version = 70013 ); // or
> declare( php_version = 70013 );
>
> -
>
> By default, this declaration is not defined (null or 0), then will not
> do anything to engine if it's not declared on script.
>
> -
>
> This declaration could be done at:
>
> - First execution file.php (bootstrap): then all application will
> follow this engine rules;
> - Any file.php: then only current file will follow this rules (to
> override locally first declaration);
> - php.ini: to set this declaration as default to all applications
> (optional);
>
> -
>
> What it does: in pratical, if the engine will deprecated or change
> something on future versions (mainly causing BCs), you should wait for
> a new major version (eg. 7.x -> 8.x). With this declaration you could
> emulates a future version to prepares your scripts to a new major
> version.
>
> -
>
> Let working on an example from: https://wiki.php.net/rfc/deprecations_php_7_2
>
> The (unset) cast should not be used anymore because it's have not any
> effect (just return null, but not affect the expression or variable).
> Let supposed that this deprecation is done at 7.2.0 (id 70200), then
> if I'm using this version and I declare engine_version like:
>
> - no declared or null: just a deprecation notice;
> - declare as 70200 or higher: error, (unset) cast doesn't exists
> (or something like that)
>
> -
>
> Then, what the engine_version does is set some variable to engine that
> could check if it could be executed on declared version, then
> developers can code their files to future versions without need wait
> for it.
>
> -
>
> If the installed version is different of declared version, then the
> engine will always consider the lowest version between both. For
> instance: if installed version is 70201 (7.2.1) and declared version
> is 70205 (7.2.5), then engine will consider changes from 70201 (7.2.1,
> once that installed is lower). And again: engine will works
> differently only if declaration is done, else, it'll works by
> deprecation notice, for instance.
>
> -
>
> What happen on engine code is something like that (pseudo-code):
>
> int engine_version () {
> return (int) engine_version_declaration;
> }
>
> cast type unset () {
> if (engine_version() >= 70201) {
> fatal(cast doesn't supported);
> }
>
> notice(deprecated);
> return null;
> }
>
>
> --
> David Rodrigues
>
> --
> 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