--- /dev/null
+--TEST--
+Using an integer as a static property name
+--FILE--
+<?php
+
+class Foo {
+ public static $bar = 42;
+}
+
+$n = 42;
+
+${42} = 24;
+var_dump(${42});
+var_dump(${(int) 42});
+var_dump(${(int) $n});
+
+try {
+ var_dump(Foo::${42});
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+
+try {
+ var_dump(Foo::${(int) 42});
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+
+try {
+ var_dump(Foo::${(int) $n});
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+int(24)
+int(24)
+int(24)
+Access to undeclared static property: Foo::$42
+Access to undeclared static property: Foo::$42
+Access to undeclared static property: Foo::$42
+
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if (IS_CONST != IS_CONST) {
+ zend_string_release(name);
+ }
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if (IS_CONST != IS_CONST) {
+ zend_string_release(name);
+ }
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if (IS_CONST != IS_CONST) {
+ zend_string_release(name);
+ }
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if (IS_CV != IS_CONST) {
+ zend_string_release(name);
+ }
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if (IS_CV != IS_CONST) {
+ zend_string_release(name);
+ }
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if (IS_CV != IS_CONST) {
+ zend_string_release(name);
+ }
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_string_release(name);
+ }
zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_string_release(name);
+ }
zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
}
retval = zend_std_get_static_property(ce, name, 0);
if (UNEXPECTED(EG(exception))) {
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_string_release(name);
+ }
zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
op_array->cache_size += sizeof(void*);
zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val)));
break;
+ case ZEND_FETCH_R:
+ case ZEND_FETCH_W:
+ case ZEND_FETCH_RW:
+ case ZEND_FETCH_IS:
+ case ZEND_FETCH_UNSET:
+ case ZEND_FETCH_FUNC_ARG:
+ TO_STRING_NOWARN(val);
+ ZEND_OP1_TYPE(opline) = IS_CONST;
+ opline->op1.constant = zend_optimizer_add_literal(op_array, val);
+ zend_string_hash_val(Z_STR(ZEND_OP1_LITERAL(opline)));
+ if (opline->extended_value == ZEND_FETCH_STATIC_MEMBER) {
+ Z_CACHE_SLOT(op_array->literals[opline->op1.constant]) = op_array->cache_size;
+ op_array->cache_size += 2 * sizeof(void*);
+ }
+ break;
case ZEND_CONCAT:
case ZEND_FAST_CONCAT:
TO_STRING_NOWARN(val);