Re: Revisiting RFC: Engine Warnings -- Undefined array index

From: Date: Tue, 13 Dec 2022 10:11:50 +0000
Subject: Re: Revisiting RFC: Engine Warnings -- Undefined array index
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-119114@lists.php.net to get a copy of this message
On 12 Dec 2022, at 23:36, Thomas Hruska <thruska@cubiclesoft.com> wrote: > I suspect many people are in a similar holding pattern who are currently running packaged 7.4.x > and are just now discovering all of the changes for PHP 8.x as they are planning out their system > upgrade paths in the coming months. While you probably wish everyone marched in step with > PHP-latest, that's simply not feasible in reality. Hi Thomas, Dan, I know a few teams that have started using 8.x on their development servers (while 7.x is still on demo/live). Each team has their difficulties, but fortunately most issues can be ignored for now (as in, code works, and gives you time to make changes)... undefined indexes are a classic, but once you've found them all (the tricky bit), it often makes your code better, and helps identify mistakes (similar to undefined variables). But, the one change I still cannot justify, is the deprecation of null being passed to the ~335 functions like htmlspecialchars. The null value can come from many sources (e.g. GET/POST/COOKIE/databases), and while you can still use null coercion in contexts like string concat (empty string), arithmetic (the value 0), or a boolean (false); finding all the function calls is incredibly hard (one team I work with, who has a fairly good test coverage, is still finding these over a year later)... at least it can be ignored for 8.x, but it's going to be a nightmare for 9.0... I tried writing an RFC to revert this change (considering there was pretty much no discussion went into it, and I cannot find a benefit for breaking coercion in this one context), but it was met with a lot of hostility from internals, so I'm finding ways to work around it, because I don't like systems using old/unsupported software (and I've got some ugly hacks for it, like using the latest version of Rector to flood your code base with (string) $var, or to use a namespace). Craig https://wiki.php.net/rfc/null_coercion_consistency <https://wiki.php.net/rfc/null_coercion_consistency> https://externals.io/message/117501 <https://externals.io/message/117501> null_coercion.php <?php namespace null_coercion; function strlen(?string $string): int { return \strlen((string) $string); } // x335 functions ?> index.php <?php namespace null_coercion; require_once('null_coercion.php'); // Probably can be auto-loaded. echo strlen('AAA'); echo strlen(NULL); echo strlen(12); echo strlen(false); ?>

« previous php.internals (#119114) next »