summaryrefslogtreecommitdiff
path: root/tests/classes/new_001.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/classes/new_001.phpt')
-rw-r--r--tests/classes/new_001.phpt48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/classes/new_001.phpt b/tests/classes/new_001.phpt
new file mode 100644
index 0000000..ee7d352
--- /dev/null
+++ b/tests/classes/new_001.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Confirm difference between assigning new directly and by reference.
+--INI--
+error_reporting=E_ALL | E_DEPRECATED
+--FILE--
+<?php
+ echo "Compile-time strict error message should precede this.\n";
+
+ class Inc
+ {
+ private static $counter = 0;
+ function __construct()
+ {
+ $this->id = ++Inc::$counter;
+ }
+ }
+
+ $f = new Inc();
+ $k =& $f;
+ echo "\$f initially points to the first object:\n";
+ var_dump($f);
+
+ echo "Assigning new object directly to \$k affects \$f:\n";
+ $k = new Inc();
+ var_dump($f);
+
+ echo "Assigning new object by ref to \$k removes it from \$f's reference set, so \$f is unchanged:\n";
+ $k =& new Inc();
+ var_dump($f);
+?>
+--EXPECTF--
+Deprecated: Assigning the return value of new by reference is deprecated in %s on line 23
+Compile-time strict error message should precede this.
+$f initially points to the first object:
+object(Inc)#%d (1) {
+ ["id"]=>
+ int(1)
+}
+Assigning new object directly to $k affects $f:
+object(Inc)#%d (1) {
+ ["id"]=>
+ int(2)
+}
+Assigning new object by ref to $k removes it from $f's reference set, so $f is unchanged:
+object(Inc)#%d (1) {
+ ["id"]=>
+ int(2)
+}