Skip to content

Commit 58edea5

Browse files
UPGRADING
1 parent bdac073 commit 58edea5

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,
@@ -178,6 +180,11 @@ PHP 8.5 UPGRADE NOTES
178180
RFC: https://wiki.php.net/rfc/pipe-operator-v3
179181
. Constructor property promotion can now be used for final properties.
180182
RFC: https://wiki.php.net/rfc/final_promotion
183+
. The #[\DelayedTargetValidation] attribute can be used to suppress
184+
compile-time errors from core (or extension) attributes that are used on
185+
invalid targets. These errors are instead reported at runtime if and when
186+
ReflectionAttribute::newInstance() is called.
187+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
181188

182189
- Curl:
183190
. Added support for share handles that are persisted across multiple PHP
@@ -470,6 +477,11 @@ PHP 8.5 UPGRADE NOTES
470477
hooks are final, and whether the property is virtual. This also affects
471478
the output of ReflectionClass::__toString() when a class contains hooked
472479
properties.
480+
. ReflectionAttribute::newInstance() can now throw errors for internal
481+
attributes if the attribute was applied on an invalid target and the
482+
error was delayed from compile-time to runtime via the
483+
#[\DelayedTargetValidation] attribute.
484+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
473485

474486
- Session:
475487
. session_start is stricter in regard to the option argument.
@@ -587,6 +599,12 @@ PHP 8.5 UPGRADE NOTES
587599
7. New Classes and Interfaces
588600
========================================
589601

602+
- Core:
603+
. DelayedTargetValidation is an attribute that, when added, delays any errors
604+
from *other* internal attributes about being applied to invalid targets from
605+
compile-time to runtime.
606+
RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute
607+
590608
- Curl:
591609
. CurlSharePersistentHandle representing a share handle that is persisted
592610
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)