} catch (Error $e) {
echo $e->getMessage(), "\n";
}
-try {
- $a{function() { }} = 1;
-} catch (Error $e) {
- echo $e->getMessage(), "\n";
-}
?>
---EXPECTF--
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s on line %d
-Illegal offset type
+--EXPECT--
Illegal offset type
--- /dev/null
+--TEST--
+Alternative offset syntax should emit E_COMPILE_ERROR in const expression
+--FILE--
+<?php
+const FOO_COMPILE_ERROR = "BAR"{0};
+var_dump(FOO_COMPILE_ERROR);
+?>
+--EXPECTF--
+Fatal error: Array and string offset access syntax with curly braces is no longer supported in %s on line 2
--- /dev/null
+--TEST--
+Alternative offset syntax should emit E_COMPILE_ERROR outside const expression
+--FILE--
+<?php
+$foo = 'BAR';
+var_dump($foo{0});
+?>
+--EXPECTF--
+Fatal error: Array and string offset access syntax with curly braces is no longer supported in %s on line 3
const A = [1 => [[]]];
-// should produce deprecation notices
-const D_1 = null ?? A[1]{'undefined'}['index'] ?? 1;
-const D_2 = null ?? A['undefined']{'index'} ?? 2;
-const D_3 = null ?? A[1]{0}{2} ?? 3; // 2 deprecation notices
-const D_4 = A[1]{0} ?? 4;
-
const T_1 = null ?? A[1]['undefined']['index'] ?? 1;
const T_2 = null ?? A['undefined']['index'] ?? 2;
const T_3 = null ?? A[1][0][2] ?? 3;
const T_5 = null ?? __LINE__;
const T_6 = __LINE__ ?? "bar";
-var_dump(D_1);
-var_dump(D_2);
-var_dump(D_3);
-var_dump(D_4);
-
var_dump(T_1);
var_dump(T_2);
var_dump(T_3);
?>
--EXPECTF--
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-int(1)
-int(2)
-int(3)
-array(0) {
-}
int(1)
int(2)
int(3)
var_dump(new $className);
var_dump(new $array['className']);
-var_dump(new $array{'className'});
var_dump(new $obj->className);
var_dump(new Test::$className);
var_dump(new $test::$className);
?>
--EXPECTF--
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s on line %d
-object(stdClass)#%d (0) {
-}
object(stdClass)#%d (0) {
}
object(stdClass)#%d (0) {
static zend_op *zend_delayed_compile_dim(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
{
if (ast->attr == ZEND_DIM_ALTERNATIVE_SYNTAX) {
- zend_error(E_DEPRECATED, "Array and string offset access syntax with curly braces is deprecated");
+ zend_error(E_COMPILE_ERROR, "Array and string offset access syntax with curly braces is no longer supported");
}
-
zend_ast *var_ast = ast->child[0];
zend_ast *dim_ast = ast->child[1];
zend_op *opline;
if (ast->attr & ZEND_DIM_ALTERNATIVE_SYNTAX) {
ast->attr &= ~ZEND_DIM_ALTERNATIVE_SYNTAX; /* remove flag to avoid duplicate warning */
- zend_error(E_DEPRECATED, "Array and string offset access syntax with curly braces is deprecated");
+ zend_error(E_COMPILE_ERROR, "Array and string offset access syntax with curly braces is no longer supported");
}
/* Set isset fetch indicator here, opcache disallows runtime altering of the AST */
function hexdump($str) {
$len = strlen($str);
for ($i = 0; $i < $len; ++$i) {
- printf("%02x", ord($str{$i}));
+ printf("%02x", ord($str[$i]));
}
print "\n";
}
var_dump($string["foo"]);
var_dump(isset($string["foo"]["bar"]));
-const FOO_DEPRECATED = "BAR"{0};
-var_dump(FOO_DEPRECATED);
-var_dump([$string{0}]); // 1 notice
-var_dump($string{1});
-var_dump(isset($string{0}));
-var_dump(isset($string{0}{0})); // 2 notices
-var_dump($string{"foo"});
-var_dump(isset($string{"foo"}{"bar"})); // 2 notices
?>
--EXPECTF--
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
-
-Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
string(1) "B"
string(1) "f"
string(1) "o"
Warning: Illegal string offset 'foo' in %s line %d
string(1) "f"
bool(false)
-string(1) "B"
-array(1) {
- [0]=>
- string(1) "f"
-}
-string(1) "o"
-bool(true)
-bool(true)
-
-Warning: Illegal string offset 'foo' in %s line %d
-string(1) "f"
-bool(false)