--- /dev/null
+--TEST--
+Bug #76860 (Missed "Accessing static property as non static" warning)
+--FILE--
+<?php
+class A {
+ private static $a = "a";
+ private static $b = "b";
+ private static $c = "c";
+ public function __construct() {
+ var_dump($this->a, $this->b, $this->c);
+ }
+}
+class B extends A {
+ private static $a = "a1";
+ protected static $b = "b1";
+ public static $c = "c1";
+}
+new B;
+?>
+--EXPECTF--
+Notice: Accessing static property B::$a as non static in %sbug76860_2.php on line 7
+
+Notice: Undefined property: B::$a in %sbug76860_2.php on line 7
+
+Notice: Accessing static property B::$b as non static in %sbug76860_2.php on line 7
+
+Notice: Undefined property: B::$b in %sbug76860_2.php on line 7
+
+Notice: Accessing static property B::$c as non static in %sbug76860_2.php on line 7
+
+Notice: Undefined property: B::$c in %sbug76860_2.php on line 7
+NULL
+NULL
+NULL
if (flags & ZEND_ACC_PUBLIC) {
if (!(flags & ZEND_ACC_CHANGED)) {
no_changed:
- if (UNEXPECTED((flags & ZEND_ACC_STATIC) != 0)) {
+ if (UNEXPECTED((property_info->flags & ZEND_ACC_STATIC) != 0)) {
if (!silent) {
zend_error(E_NOTICE, "Accessing static property %s::$%s as non static", ZSTR_VAL(ce->name), ZSTR_VAL(member));
}
&& ((zend_property_info*)Z_PTR_P(zv))->flags & ZEND_ACC_PRIVATE
&& ((zend_property_info*)Z_PTR_P(zv))->ce == scope) {
property_info = (zend_property_info*)Z_PTR_P(zv);
- if (UNEXPECTED((property_info->flags & ZEND_ACC_STATIC) != 0)) {
- return ZEND_DYNAMIC_PROPERTY_OFFSET;
- }
+ goto no_changed;
} else if (UNEXPECTED(property_info == NULL)) {
exit_dynamic:
if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0' && ZSTR_LEN(member) != 0)) {
if (flags & ZEND_ACC_PUBLIC) {
if (!(flags & ZEND_ACC_CHANGED)) {
no_changed:
- if (UNEXPECTED((flags & ZEND_ACC_STATIC) != 0)) {
+ if (UNEXPECTED((property_info->flags & ZEND_ACC_STATIC) != 0)) {
if (!silent) {
zend_error(E_NOTICE, "Accessing static property %s::$%s as non static", ZSTR_VAL(ce->name), ZSTR_VAL(member));
}
&& ((zend_property_info*)Z_PTR_P(zv))->flags & ZEND_ACC_PRIVATE
&& ((zend_property_info*)Z_PTR_P(zv))->ce == scope) {
property_info = (zend_property_info*)Z_PTR_P(zv);
+ goto no_changed;
} else if (UNEXPECTED(property_info == NULL)) {
exit_dynamic:
if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0' && ZSTR_LEN(member) != 0)) {