Re: [RFC] Reclassifying engine warnings
| From: | Rowan Tommins | Date: | Fri, 13 Sep 2019 08:39:55 +0000 |
| Subject: | Re: [RFC] Reclassifying engine warnings | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-107057@lists.php.net to get a copy of this message | ||
On 13/09/2019 09:01, Robert Korulczyk wrote:
Actually you need only one additional line:
$foo = [];
foreach ( $something as $key1 ) {
foreach ( $somethingElse as $key2 ) {
$foo[$key1][$key2] ??= 0;
$foo[$key1][$key2]++;
}
}
Why? If "assume $key2 exists as a key and is an integer" is so bad that PHP should halt my program, why should "assume $key1 exists and is an array" be perfectly OK?
It does not look confusing. You have two lines, for two intents - start counting from zero and increment counter on every loop iteration.There is no intent to start counting at zero; the counter will never be lower than 1. If we really wanted to express the intent, we would have to write something like this: $foo[$key1] ??= []; if ( ! isset($foo[$key1][$key2]) ) { $foo[$key1][$key2] = 1; } else { $foo[$key1][$key2]++; }
If one additional line is to much for making your code less ambiguous and more bug-free, then I won't even try to change your mind.Please can you show me a bug that adding this line has avoided? I don't doubt that the same warning saves bugs in other scenarios, but in this scenario, the logic is unambiguous, and any additions are just to suppress unnecessary errors. To reiterate, my motivation here is to discuss features that help write these scenarios with less boilerplate, and separate them from other scenarios where there's a real bug risk which should raise an error. Regards, -- Rowan Tommins (né Collins) [IMSoP]