mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Improved error message for typed class properties with null as default value
Closes GH-6396.
This commit is contained in:
parent
94938e4ee7
commit
6d6fadeb0d
2 changed files with 20 additions and 2 deletions
15
Zend/tests/nullable_types/union_nullable_property_fails.phpt
Normal file
15
Zend/tests/nullable_types/union_nullable_property_fails.phpt
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
--TEST--
|
||||||
|
Nullable default property error message
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class A {
|
||||||
|
public string|int $b = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$t = new A;
|
||||||
|
$t->b;
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
Fatal error: Default value for property of type string|int may not be null. Use the nullable type string|int|null to allow null default value in %s on line %d
|
|
@ -7042,10 +7042,13 @@ void zend_compile_prop_decl(zend_ast *ast, zend_ast *type_ast, uint32_t flags, z
|
||||||
&& !zend_is_valid_default_value(type, &value_zv)) {
|
&& !zend_is_valid_default_value(type, &value_zv)) {
|
||||||
zend_string *str = zend_type_to_string(type);
|
zend_string *str = zend_type_to_string(type);
|
||||||
if (Z_TYPE(value_zv) == IS_NULL) {
|
if (Z_TYPE(value_zv) == IS_NULL) {
|
||||||
|
ZEND_TYPE_FULL_MASK(type) |= MAY_BE_NULL;
|
||||||
|
zend_string *nullable_str = zend_type_to_string(type);
|
||||||
|
|
||||||
zend_error_noreturn(E_COMPILE_ERROR,
|
zend_error_noreturn(E_COMPILE_ERROR,
|
||||||
"Default value for property of type %s may not be null. "
|
"Default value for property of type %s may not be null. "
|
||||||
"Use the nullable type ?%s to allow null default value",
|
"Use the nullable type %s to allow null default value",
|
||||||
ZSTR_VAL(str), ZSTR_VAL(str));
|
ZSTR_VAL(str), ZSTR_VAL(nullable_str));
|
||||||
} else {
|
} else {
|
||||||
zend_error_noreturn(E_COMPILE_ERROR,
|
zend_error_noreturn(E_COMPILE_ERROR,
|
||||||
"Cannot use %s as default value for property %s::$%s of type %s",
|
"Cannot use %s as default value for property %s::$%s of type %s",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue