@@ -23,6 +23,58 @@ PHP 8.6 UPGRADE NOTES
2323 . It is no longer possible to clone variant objects, this is because
2424 the cloning behaviour was ill defined.
2525
26+ - Core:
27+ . PHP is now case-sensitive for function and class names. The global function
28+ table and class table are now keyed by the canonical (declared) name rather
29+ than its lowercase equivalent. As a result, calling a function with
30+ incorrect casing (e.g. STRLEN() instead of strlen()) now raises a fatal
31+ Error ("Call to undefined function STRLEN()"), and referencing a class,
32+ interface, trait, or enum with incorrect casing (e.g. new FOO() when the
33+ class is declared as Foo) now raises a fatal Error ("Class 'FOO' not
34+ found"). This applies to all language constructs and APIs that perform a
35+ name lookup: new, instanceof, catch, extends, implements, use (trait), type
36+ declarations, callable strings/arrays, class_exists() and related
37+ introspection functions, Closure::bind()/bindTo(), Reflection constructors
38+ and methods, and the SOAP classmap option.
39+ RFC: https://wiki.php.net/rfc/case_sensitive_php
40+ . Namespace segments in use imports are now matched case-sensitively. A use
41+ import whose path does not match the canonical casing of the target
42+ namespace segment will produce a fatal Error when the imported name is
43+ first resolved.
44+ RFC: https://wiki.php.net/rfc/case_sensitive_php
45+ . Declaring a magic method with incorrect casing (e.g. __tostring() instead
46+ of __toString()) is now a compile-time fatal Error. Previously magic
47+ method names were matched case-insensitively; under case-sensitive method
48+ names a wrong-cased declaration would otherwise silently lose its magic
49+ behavior.
50+ RFC: https://wiki.php.net/rfc/case_sensitive_php
51+ . Attribute names are now matched case-sensitively, consistent with class
52+ names. Internal attributes such as #[\Deprecated], #[\Override] or
53+ #[\AllowDynamicProperties] are only recognized with their exact casing,
54+ and the name filter of ReflectionFunctionAbstract::getAttributes() and
55+ related methods compares case-sensitively. The "self", "parent" and
56+ "static" keywords in callable strings remain case-insensitive.
57+ RFC: https://wiki.php.net/rfc/case_sensitive_php
58+ . The namespace portion of constant names is now case-sensitive, matching
59+ the constant base name. Referencing a namespaced constant with incorrect
60+ namespace casing (e.g. myapp\FOO when defined as MyApp\FOO) now raises
61+ an "Undefined constant" Error, including via constant() and defined().
62+ RFC: https://wiki.php.net/rfc/case_sensitive_php
63+
64+ - SOAP:
65+ . WSDL operation names are now matched case-sensitively when dispatching
66+ requests and when calling operations through SoapClient. This matches
67+ XML, where element names are case-sensitive. SoapServer::addFunction()
68+ also requires the exact case of the registered PHP function.
69+ RFC: https://wiki.php.net/rfc/case_sensitive_php
70+
71+ - SPL:
72+ . The default spl_autoload() implementation now builds the include file
73+ name from the case-preserved class name instead of its lowercased form.
74+ On case-sensitive file systems the file name must match the class name
75+ casing (e.g. MyClass.php instead of myclass.php).
76+ RFC: https://wiki.php.net/rfc/case_sensitive_php
77+
2678- DOM:
2779 . Properties previously documented as @readonly (e.g. DOMNode::$nodeType,
2880 DOMDocument::$xmlEncoding, DOMEntity::$actualEncoding, ::$encoding,
0 commit comments