Skip to content

Commit b4c70c5

Browse files
UPGRADING
1 parent f7e14d5 commit b4c70c5

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

UPGRADING

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ PHP 8.5 UPGRADE NOTES
5353
. Applying #[\Attribute] to an abstract class, enum, interface, or trait triggers
5454
an error during compilation. Previously, the attribute could be added, but when
5555
ReflectionAttribute::newInstance() was called an error would be thrown.
56+
The error can be delayed from compilation to runtime using the new
57+
#[\DelayedTargetValidation] attribute.
5658

5759
- DOM:
5860
. Cloning a DOMNamedNodeMap, DOMNodeList, Dom\NamedNodeMap, Dom\NodeList,
@@ -180,6 +182,11 @@ PHP 8.5 UPGRADE NOTES
180182
RFC: https://wiki.php.net/rfc/final_promotion
181183
. #[\Override] can now be applied to properties.
182184
RFC: https://wiki.php.net/rfc/override_properties
185+
. The #[\DelayedTargetValidation] attribute can be used to suppress
186+
compile-time errors from core (or extension) attributes that are used on
187+
invalid targets. These errors are instead reported at runtime if and when
188+
ReflectionAttribute::newInstance() is called.
189+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
183190

184191
- Curl:
185192
. Added support for share handles that are persisted across multiple PHP
@@ -506,6 +513,11 @@ PHP 8.5 UPGRADE NOTES
506513
hooks are final, and whether the property is virtual. This also affects
507514
the output of ReflectionClass::__toString() when a class contains hooked
508515
properties.
516+
. ReflectionAttribute::newInstance() can now throw errors for internal
517+
attributes if the attribute was applied on an invalid target and the
518+
error was delayed from compile-time to runtime via the
519+
#[\DelayedTargetValidation] attribute.
520+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
509521

510522
- Session:
511523
. session_start is stricter in regard to the option argument.
@@ -623,6 +635,12 @@ PHP 8.5 UPGRADE NOTES
623635
7. New Classes and Interfaces
624636
========================================
625637

638+
- Core:
639+
. DelayedTargetValidation is an attribute that, when added, delays any errors
640+
from *other* internal attributes about being applied to invalid targets from
641+
compile-time to runtime.
642+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
643+
626644
- Curl:
627645
. CurlSharePersistentHandle representing a share handle that is persisted
628646
across multiple PHP requests.

UPGRADING.INTERNALS

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ PHP 8.5 INTERNALS UPGRADE NOTES
2828
extra layer of indirection can be removed. In other cases a zval can
2929
be heap-allocated and stored in the pointer as a minimal change to keep
3030
compatibility.
31+
. The `target` parameter for validator callbacks for internal attributes
32+
can now include in the bitmask the new flags
33+
ZEND_ATTRIBUTE_NO_TARGET_VALIDATION and
34+
ZEND_ATTRIBUTE_DELAYED_TARGET_VALIDATION. The first indicates that, if the
35+
attribute is being applied to an invalid target, no error should be thrown
36+
at compile time. The second indicates that validation is being performed
37+
at runtime and that if an attribute is being applied to an invalid target,
38+
a catchable error should be thrown. Target validation is different from
39+
the actual functionality of the attribute; e.g. the #[\Override] attribute
40+
will trigger an error if the function does not override a method from the
41+
parent class or from an interface; that error does not get delayed.
42+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
3143

3244
- Hash
3345
. Hash functions now use proper hash_spec_result enum for return values

0 commit comments

Comments
 (0)