1--TEST--
2Returning a reference from a non-static method via another non-static method
3--FILE--
4<?php
5class C {
6    function returnConstantByValue() {
7        return 100;
8    }
9
10    function &returnConstantByRef() {
11        return 100;
12    }
13
14    function &returnVariableByRef() {
15        return $GLOBALS['a'];
16    }
17
18    function &returnFunctionCallByRef($functionToCall) {
19        return $this->$functionToCall();
20    }
21}
22$c = new C;
23
24echo "\n---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:\n";
25unset($a, $b);
26$a = 4;
27$b = &$c->returnFunctionCallByRef('returnConstantByValue');
28$a++;
29var_dump($a, $b);
30
31echo "\n---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:\n";
32unset($a, $b);
33$a = 4;
34$b = &$c->returnFunctionCallByRef('returnConstantByRef');
35$a++;
36var_dump($a, $b);
37
38echo "\n---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:\n";
39unset($a, $b);
40$a = 4;
41$b = &$c->returnFunctionCallByRef('returnVariableByRef');
42$a++;
43var_dump($a, $b);
44
45?>
46--EXPECTF--
47---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:
48
49Notice: Only variable references should be returned by reference in %s on line 16
50int(5)
51int(100)
52
53---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:
54
55Notice: Only variable references should be returned by reference in %s on line 8
56int(5)
57int(100)
58
59---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:
60int(5)
61int(5)
62