·
145 commits
to 2.3.x
since this release
Immutable
release. Only release title and notes can be modified.
Improvements 🔧
- Apply
finallyscope changes to try-catch exit points and check by-ref return types afterfinally(#6393), #13338 - Fix PHP 8.6 deprecation in hoa/consistency (#6405), thanks @SanderMuller!
Bugfixes 🐛
- Compare conditional expressions in
MutatingScope::equals()(#6344), #15157, thanks @janedbal! - Fix
containsNull()for union withnull&T of mixed(#6390), thanks @vojtech-dobes! - Do not resolve include paths through a stream wrapper that is not registered (#6397), #15192
- Do not treat
mixedtype arguments as compatible both ways when both generic types are parameterized (#6398), #15198 - Fix union of template array-key with false losing the template (#6376), #13374, #13192, #10871, #8268, #7423, #7279, #7049, thanks @calebdw!
- Fix false positive comparing identical generic types below level 8 (#6392), #13876, #12984, #12008, #11041, #10698, #9377, #9096, thanks @calebdw!
pcntl_exec()is not supported by blackfire (#6409), thanks @staabm!UsedNamesRule: reset imported names at everynamespacedeclaration instead of keying them by namespace name (#6413), #15215- Derive per-arm conditional expressions from overlapping ternary arm types (#6381), #7905
- Record needle-implies-true conditional expression for in_array() assignments (#6381), #9752
- Propagate conditional expressions through derived assignments (#6381), #13054
- Do not report
?? null/??= nullas unnecessary when evaluating the right side has side effects (#6418), #15134, thanks @VincentLanglet and @staabm!
Performance 🏎️
- Reduce repeated work when matching ignored errors (#6374), thanks @zonuexe!
- Do not look up class reflection for properties without hooks (#6396)
- Share the directory walk between the analyse and the scan file finder (#6396)
- Read the exported PHPDoc scope off the AST instead of through FileTypeMapper (#6396)
- Memoize
ClassReflection::getName()(#6406) - Inline single-return getters when building the PHAR (#6406, #6412)
- Remove a union of values from a set in one pass (#6427)
- Key types by their value where
describe()was standing in for it (#6427) - Answer reflection cache misses without a failing
include()(#6430)