Skip to content

Commit 1e13221

Browse files
committed
Restore CV
1 parent 78f2cfb commit 1e13221

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--TEST--
2+
using() restores CV
3+
--FILE--
4+
<?php
5+
6+
require 'basic_manager.inc';
7+
8+
class A {}
9+
10+
$value = new A;
11+
$value2 = $value;
12+
13+
echo "# \$value before using():\n";
14+
var_dump($value);
15+
16+
using (new Manager() as $value) {
17+
echo "# \$value in using():\n";
18+
var_dump($value);
19+
}
20+
21+
echo "# \$value after using():\n";
22+
var_dump($value);
23+
var_dump($value === $value2);
24+
25+
?>
26+
--EXPECTF--
27+
# $value before using():
28+
object(A)#%d (0) {
29+
}
30+
Manager::enterContext()
31+
# $value in using():
32+
object(stdClass)#%d (0) {
33+
}
34+
Manager::exitContext(null)
35+
# $value after using():
36+
object(A)#%d (0) {
37+
}
38+
bool(true)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
using() restores CV iff it was set
3+
--FILE--
4+
<?php
5+
6+
require 'basic_manager.inc';
7+
8+
using (new Manager() as $value) {
9+
var_dump($value);
10+
}
11+
12+
echo "\$value is set after using():\n";
13+
var_dump(isset($value));
14+
var_dump(array_key_exists('value', get_defined_vars()));
15+
16+
?>
17+
--EXPECTF--
18+
Manager::enterContext()
19+
object(stdClass)#%d (0) {
20+
}
21+
Manager::exitContext(null)
22+
$value is set after using():
23+
bool(false)
24+
bool(false)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
--TEST--
2+
using() restores CV and preserves references
3+
--FILE--
4+
<?php
5+
6+
require 'basic_manager.inc';
7+
8+
class A {}
9+
class B {}
10+
11+
$value = new A;
12+
$value2 = &$value;
13+
14+
echo "# \$value before using():\n";
15+
var_dump($value);
16+
17+
using (new Manager() as $value) {
18+
echo "# \$value in using():\n";
19+
var_dump($value);
20+
$value = null;
21+
}
22+
23+
echo "# \$value after using():\n";
24+
var_dump($value);
25+
$value = new B;
26+
27+
echo "# \$value2 references \$value:\n";
28+
var_dump($value2 === $value);
29+
30+
?>
31+
--EXPECTF--
32+
# $value before using():
33+
object(A)#%d (0) {
34+
}
35+
Manager::enterContext()
36+
# $value in using():
37+
object(stdClass)#%d (0) {
38+
}
39+
Manager::exitContext(null)
40+
# $value after using():
41+
object(A)#%d (0) {
42+
}
43+
# $value2 references $value:
44+
bool(true)

0 commit comments

Comments
 (0)