Re: Long-Term Planning for PHP 9.0 Error Promotion

From: Date: Fri, 28 Jan 2022 14:32:33 +0000
Subject: Re: Long-Term Planning for PHP 9.0 Error Promotion
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-116944@lists.php.net to get a copy of this message
On Fri, Jan 28, 2022 at 3:13 PM Robert Landers <landers.robert@gmail.com> wrote: > I would posit differently. In my experience in upgrading code, it was > mostly intentional. > Here's an example: > > ---- > if($doThing) { > $doOtherThing = maybe(); > } > // later > if($doOtherThing) { > doOtherThing(); > } > --- > > There's no bug here, nothing is unintentional, and the intent is clear. > Now, > if we want to get rid of the warning we need to say $doOtherThing = false > before getting to the first if-statement, but should this halt everything > in > production? I don't personally think so and it would be undesirable for it > to do so. > Let me go over this. > There's no bug here, nothing is unintentional, and the intent is clear I cannot guarantee there's no bug, I cannot guarantee that this is intentional, and the intent is certainly not clear. I can't tell whether or not this code is suffering from a merge conflict, and I cannot guarantee that whatever type maybe(); returns here works. If at some point the return type of null is changed to false, while the assumption of undefined is null, passing false to a nullable typed argument later on will break. > Now, if we want to get rid of the warning we need to say $doOtherThing = false before getting to the first if-statement Thank you for pointing to the example above. null and false are different values. Your assumption here is that setting it to false would fix the problem, but the actual value would've been null and changing it to false might actually break more. > but should this halt everything in production? I don't personally think so and it would be undesirable for it to do so. Any type error should if you ask me. Unexpected types cause unexpected behavior, and the longer PHP will try to continue with assumptions of types and implicit casting, the bigger the damage can be. All this type juggling is headache material and the less I see of it, the better.

« previous php.internals (#116944) next »