What's Changed
Features
- Infer object shape when array or scalar is cast to object by @theodorejb in #7935
- Improve @return annotation for implode() so that it can handle non-empty-array of non-empty-strings case by @hirokinoue in #7967
- Bugfix/#7912 class APCuIterator does not exist by @KevinVanSonsbeek in #7982
- Improve @psalm-internal and prevent usage of IssueBuffer::add(). by @AndrolGenhald in #8165
- Encapsed literal strings by @AndrolGenhald in #8164
Fixes
- fix missing is_a() parameter type by @staabm in #7951
- Improve array_unique callmap stubs by @mathroc in #7981
- Precise stat return type by @VincentLanglet in #8032
- Bugfix/splfileobject fputcsv invalidnamedargument by @KevinVanSonsbeek in #8042
- Fix
TypeCombiner::combine
to not modify TIntRange arguments. by @AndrolGenhald in #8049 - Coerce null to empty string in array keys by @weirdan in #8064
- Fix generic object comparison to use template constraint as default. by @AndrolGenhald in #8069
- Fix possibly empty array shape appearing non-empty (fixes #8048). by @AndrolGenhald in #8051
- fix #8099: ob_implicit_flush argument type changed to bool by @SamMousa in #8100
- number_format: allow third and forth parameters to be nullable by @drealecs in #8114
- Add ReflectionClass & ReflectionObject::isEnum() by @BenMorel in #8117
- Add missing ldap_unbind mapping for php 8.1 by @othercorey in #8126
- Fix signatures of ldap_* functions by @othercorey in #8147
- Fix datefmt_* function signatures by @othercorey in #8153
- Fix filter_var and filter_var_array signatures by @othercorey in #8152
- Fix array_* function signatures by @othercorey in #8151
- Add ReflectionProperty properties by @BenMorel in #8148
- Fix crash when redefining method with fewer params (fixes #8141). by @AndrolGenhald in #8174
Docs
- fix small error in plugins_type_system.md by @mathroc in #7914
- Clarify in docs that zero is not considered a positive-int by @bdsl in #8060
Internal changes
- Fix conflict of option -c with shell completion by @GromNaN in #7988
- change cache hash type for better performance by @kkmuffme in #7997
- micro-optimize condition by @kkmuffme in #8009
- igbinary_serialize code was missing in file by @kkmuffme in #8007
- Performance only load files once by @kkmuffme in #8011
- Fix syntax check failures by @weirdan in #8028
- Backport #7506 by @weirdan in #8027
- Run Shepherd with 8.0 by @weirdan in #8029
- Performance: cut the selected_text from snippet by @kkmuffme in #8055
- store origin location by ID to speed up psalm by up to 75% by @kkmuffme in #8054
- tests: add test that validates the callmap in the current runtime by @SamMousa in #8104
- Callmap validation ignore list cleanup by @SamMousa in #8144
Other changes
New Contributors
Full Changelog: 4.23.0...4.24.0