PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+?? ??? ????, PHP 7.4.1
+
+- Core:
+ . Fixed bug #78810 (RW fetches do not throw "uninitialized property"
+ exception). (Nikita)
+
?? ??? ????, PHP 7.4.0RC6
- Core:
--- /dev/null
+--TEST--
+Bug #78810: RW fetches do not throw "uninitialized property" exception
+--FILE--
+<?php
+
+class Test {
+ public int $i;
+}
+
+$test = new Test;
+try {
+ $test->i++;
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ $test->i += 1;
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+Typed property Test::$i must not be accessed before initialization
+Typed property Test::$i must not be accessed before initialization
if (EXPECTED(!zobj->ce->__get) ||
UNEXPECTED((*zend_get_property_guard(zobj, name)) & IN_GET)) {
if (UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) {
- ZVAL_NULL(retval);
- zend_error(E_NOTICE, "Undefined property: %s::$%s", ZSTR_VAL(zobj->ce->name), ZSTR_VAL(name));
+ if (UNEXPECTED(prop_info)) {
+ zend_throw_error(NULL,
+ "Typed property %s::$%s must not be accessed before initialization",
+ ZSTR_VAL(prop_info->ce->name),
+ ZSTR_VAL(name));
+ retval = &EG(error_zval);
+ } else {
+ ZVAL_NULL(retval);
+ zend_error(E_NOTICE, "Undefined property: %s::$%s", ZSTR_VAL(zobj->ce->name), ZSTR_VAL(name));
+ }
}
} else {
/* we do have getter - fail and let it try again with usual get/set */