On 09/11/2023 14:58, Craig Francis wrote:
We might as well make the PHP 9 upgrade as hard as possible, just to force a 
little bit of `strict_types=1` on everyone.


Just to be clear, strict_types has nothing to do with this; changing it does not allow you to pass nulls to typed parameters, and never did: https://3v4l.org/atT0B

Nor has strict_types=0 ever been aligned to the loosest coercion rules used in other contexts; for instance, an empty string was never an acceptable input for an integer parameter, even in versions where it was an acceptable operand for addition: https://3v4l.org/khD32


As for your previous example:

> redirect('/thank-you/?ref=' . urlencode($ref));

If $ref isn't set, any of these might be the correct URL: "/thank-you/", "/thank-you/?ref=", "/thank-you/?ref=default", ... The language can only guess one of those.

A similar example I've come across is in manually escaped SQL (yes, I know, use parameters instead...):

$sql = "Insert Into blah ( whatever ) Values ( '" . sql_escape($someVar) . "' )";

Nine times out of ten, if the PHP variable is null, you want an SQL null, not ''; but if the [imaginary] sql_escape function doesn't reject nulls, you may not notice the bug until you've ended up with garbage in your DB.


Regards,

--
Rowan Tommins
[IMSoP]

Reply via email to