summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2014-07-02 12:31:50 +0200
committerBob Weinand <bobwei9@hotmail.com>2014-07-02 12:33:46 +0200
commit09d1a8aaab15eef182dd71cf6aa506f54dc70ea7 (patch)
tree065332e3f44382c924c4bccd859e9e751401e353
parent05cc46a96b44c4b0ead2909864c9b683103c5946 (diff)
downloadphp-git-09d1a8aaab15eef182dd71cf6aa506f54dc70ea7.tar.gz
Add tests for constant expression arrays
Adding one failing (!) test for now about circular constant references embedded in a constant AST, must be fixed before PHP 5.6 release.
-rw-r--r--Zend/tests/constant_expressions_arrays.phpt35
-rw-r--r--Zend/tests/constant_expressions_self_referencing_array.phpt13
2 files changed, 48 insertions, 0 deletions
diff --git a/Zend/tests/constant_expressions_arrays.phpt b/Zend/tests/constant_expressions_arrays.phpt
new file mode 100644
index 0000000000..f1f025180e
--- /dev/null
+++ b/Zend/tests/constant_expressions_arrays.phpt
@@ -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
index 0000000000..7fc477d470
--- /dev/null
+++ b/Zend/tests/constant_expressions_self_referencing_array.phpt
@@ -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
+