1--TEST--
2Pass function and method calls by reference and by value.
3--FILE--
4<?php
5class C {
6    static function sreturnVal() {
7        global $a;
8        return $a;
9    }
10
11    static function &sreturnReference() {
12        global $a;
13        return $a;
14    }
15
16    function returnVal() {
17        global $a;
18        return $a;
19    }
20
21    function &returnReference() {
22        global $a;
23        return $a;
24    }
25}
26
27function returnVal() {
28        global $a;
29        return $a;
30}
31
32function &returnReference() {
33        global $a;
34        return $a;
35}
36
37
38
39function foo(&$ref) {
40    var_dump($ref);
41    $ref = "changed";
42}
43
44
45echo "Pass a function call that returns a value:\n";
46$a = "original";
47foo(returnVal());
48var_dump($a);
49
50echo "Pass a function call that returns a reference:\n";
51$a = "original";
52foo(returnReference());
53var_dump($a);
54
55
56echo "\nPass a static method call that returns a value:\n";
57$a = "original";
58foo(C::sreturnVal());
59var_dump($a);
60
61echo "Pass a static method call that returns a reference:\n";
62$a = "original";
63foo(C::sreturnReference());
64var_dump($a);
65
66
67$myC = new C;
68echo "\nPass a method call that returns a value:\n";
69$a = "original";
70foo($myC->returnVal());
71var_dump($a);
72
73echo "Pass a method call that returns a reference:\n";
74$a = "original";
75foo($myC->returnReference());
76var_dump($a);
77
78?>
79--EXPECTF--
80Pass a function call that returns a value:
81
82Notice: Only variables should be passed by reference in %s on line 44
83string(8) "original"
84string(8) "original"
85Pass a function call that returns a reference:
86string(8) "original"
87string(7) "changed"
88
89Pass a static method call that returns a value:
90
91Notice: Only variables should be passed by reference in %s on line 55
92string(8) "original"
93string(8) "original"
94Pass a static method call that returns a reference:
95string(8) "original"
96string(7) "changed"
97
98Pass a method call that returns a value:
99
100Notice: Only variables should be passed by reference in %s on line 67
101string(8) "original"
102string(8) "original"
103Pass a method call that returns a reference:
104string(8) "original"
105string(7) "changed"
106