]> granicus.if.org Git - php/commitdiff
Add tests for constant expression arrays
authorBob Weinand <bobwei9@hotmail.com>
Wed, 2 Jul 2014 10:31:50 +0000 (12:31 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Wed, 2 Jul 2014 10:33:46 +0000 (12:33 +0200)
Adding one failing (!) test for now about circular constant references embedded in a constant AST, must be fixed before PHP 5.6 release.

Zend/tests/constant_expressions_arrays.phpt [new file with mode: 0644]
Zend/tests/constant_expressions_self_referencing_array.phpt [new file with mode: 0644]

diff --git a/Zend/tests/constant_expressions_arrays.phpt b/Zend/tests/constant_expressions_arrays.phpt
new file mode 100644 (file)
index 0000000..f1f0251
--- /dev/null
@@ -0,0 +1,35 @@
+---TEST---
+Constant expressions with arrays
+---FILE---
+<?php
+const a = [1,2,[3,[4]]];
+const b = a[0];
+const c = a[2][0];
+const d = a[2];
+const e = ["string" => [1]]["string"][0];
+
+var_dump(b, c, e);
+
+function test ($a = d[1][0]) {
+       var_dump($a);
+}
+
+test();
+
+class foo {
+       const bar = [1][0];
+}
+
+var_dump(foo::bar);
+
+var_dump(a); // Eventually allow that later with array dereferencing of constants
+
+?>
+---EXPECTF---
+int(1)
+int(3)
+int(1)
+int(4)
+int(1)
+
+Fatal error: Arrays are not allowed in constants at run-time in %s on line %d
diff --git a/Zend/tests/constant_expressions_self_referencing_array.phpt b/Zend/tests/constant_expressions_self_referencing_array.phpt
new file mode 100644 (file)
index 0000000..7fc477d
--- /dev/null
@@ -0,0 +1,13 @@
+---TEST---
+Self-referencing constant expression (part of a constant AST)
+---FILE---
+<?php
+class A {
+   const FOO = [self::BAR];
+   const BAR = [self::FOO];
+}
+var_dump(A::FOO);
+?>
+---EXPECTF---
+Fatal error: Cannot declare self-referencing constant 'self::FOO' in %s on line %d
+