Line | |
---|
1 | --TEST--
|
---|
2 | Function -- clone
|
---|
3 | --SKIPIF--
|
---|
4 | <?php if (version_compare(phpversion(), '5.0') !== -1) { echo 'skip'; } ?>
|
---|
5 | --FILE--
|
---|
6 | <?php
|
---|
7 | require_once 'PHP/Compat.php';
|
---|
8 | PHP_Compat::loadFunction('clone');
|
---|
9 |
|
---|
10 | // Test classes
|
---|
11 | class testclass
|
---|
12 | {
|
---|
13 | var $foo = 'foo';
|
---|
14 | }
|
---|
15 |
|
---|
16 | class testclass2
|
---|
17 | {
|
---|
18 | var $foo = 'foo';
|
---|
19 |
|
---|
20 | function __clone()
|
---|
21 | {
|
---|
22 | $this->foo = 'bar';
|
---|
23 | }
|
---|
24 | }
|
---|
25 |
|
---|
26 | class testclass3
|
---|
27 | {
|
---|
28 | var $bar;
|
---|
29 | }
|
---|
30 |
|
---|
31 | class testclass4
|
---|
32 | {
|
---|
33 | var $foo;
|
---|
34 | function __clone()
|
---|
35 | {
|
---|
36 | $this->foo = clone($this->foo);
|
---|
37 | }
|
---|
38 | }
|
---|
39 |
|
---|
40 | // Test 1: Initial value
|
---|
41 | $aa = new testclass;
|
---|
42 | echo $aa->foo, "\n"; // foo
|
---|
43 |
|
---|
44 | // Test 2: Not referenced
|
---|
45 | $bb = clone($aa);
|
---|
46 | $bb->foo = 'baz';
|
---|
47 | echo $aa->foo, "\n"; // foo
|
---|
48 |
|
---|
49 | // Test 3: __clone method
|
---|
50 | $cc = new testclass2;
|
---|
51 | echo $cc->foo, "\n"; // foo
|
---|
52 | $dd = clone($cc);
|
---|
53 | echo $dd->foo, "\n"; // bar
|
---|
54 |
|
---|
55 | // Test 4: Bug #3649
|
---|
56 | $a = new testclass3;
|
---|
57 | $a->foo =& new testclass4;
|
---|
58 | $a->foo->bar = 'hello';
|
---|
59 | $aclone = clone($a);
|
---|
60 | $aclone->b->bar = 'goodbye';
|
---|
61 | echo $a->foo->bar, "\n";
|
---|
62 |
|
---|
63 | ?>
|
---|
64 | --EXPECT--
|
---|
65 | foo
|
---|
66 | foo
|
---|
67 | foo
|
---|
68 | bar
|
---|
69 | hello |
---|
Note: See
TracBrowser
for help on using the repository browser.