1--TEST--
2Test debug_zval_dump() function : usage variations
3--FILE--
4<?php
5echo "*** Testing debug_zval_dump() on functions ***\n";
6echo "--- Variation 1: global variable inside a function ---\n";
7$global_var = 10;  //declaring global variable
8
9/* function to dump reference count of global variable,$global_var
10   and local variable,$local_var */
11function dump_globalvar( &$local_var ) {
12  global $global_var;
13  echo "\n-- Value of local variable inside dump_globalvar() --\n";
14  debug_zval_dump( $local_var );
15  echo "\n-- Value of global variable inside dump_globalvar() --\n";
16  debug_zval_dump( $global_var );
17}
18/* dump value and reference count of $global_var using debug_zval_dump() */
19echo "\n-- Value of global variable, before calling dump_globalvar() --\n";
20debug_zval_dump( $global_var );
21
22/* calling function dump_globalvar() to check the reference count of local
23   and global variables inside the function */
24dump_globalvar( $global_var );
25
26/* dump value and reference count of $global_var after exiting function
27   dump_globalvar();
28   expected: reference count of $global_var should remain the same as
29             before calling dump_globalvar() function */
30echo "\n-- Value of global variable, after exiting dump_globalvar() --\n";
31debug_zval_dump( $global_var );
32
33echo "\n--- Variation 2: one variable references another ---\n";
34$first_var = 10;
35/* dump value and reference count of $first_var */
36echo "\n-- Value of \$first_var: --\n";
37debug_zval_dump($first_var);
38
39/* $ref_first_var references $first_var */
40$ref_first_var = &$var_1;
41
42echo "\n-- Value of \$ref_first_var --\n";
43debug_zval_dump($ref_first_var);
44echo "\n-- Value of \$first_var --\n";
45debug_zval_dump($first_var);
46
47unset($ref_first_var);
48
49/* dump value and reference count of $first_var, $ref_first_var
50   here $ref_first_var is unset */
51echo "\n-- Value of \$ref_first_var --\n";
52debug_zval_dump($ref_first_var);
53echo "\n-- Value of \$first_var --\n";
54debug_zval_dump($first_var);
55
56echo "\n--- Variation 3: multiple references of variables ---\n";
57$var_1 = 10;
58$var_2 = &$var_1;
59$var_3 = &$var_2;
60echo "\n-- Value of \$var_1: (before referencing) --\n";
61debug_zval_dump($var_1);
62echo "\n-- Value of \$var_2: (referencing var_1) --\n";
63debug_zval_dump($var_2);
64echo "\n-- Value of \$var_3: (referencing var_2) --\n";
65debug_zval_dump($var_3);
66
67/* unsetting $var_3 */
68unset($var_3);
69echo "\n-- Value of \$var_3: (after unsetting var_3) --\n";
70debug_zval_dump($var_3);
71echo "\n-- Value of \$var_2: --\n";
72debug_zval_dump($var_2);
73echo "\n-- Value of \$var_3: --\n";
74debug_zval_dump($var_1);
75
76/* unsetting $var_1 */
77unset($var_1);
78echo "\n-- Value of \$var_1: (after unsetting variable_1) --\n";
79debug_zval_dump($var_1);
80echo "\n-- Value of \$var_2: --\n";
81debug_zval_dump($var_2);
82
83echo "\n*** Testing debug_zval_dump() on miscellaneous input arguments ***\n";
84/* unset a variable */
85$unset_var = 10.5;
86unset($unset_var);
87
88$misc_values = array (
89  /* nulls */
90  NULL,
91  null,
92
93  /* unset variable */
94  @$unset_var,
95
96  /* undefined variable */
97  @$undef_var,
98
99 /* mixed types */
100  "TRUE123",
101  "123string",
102  "string123",
103  "NULLstring"
104);
105/* loop to display the variables and its reference count using
106    debug_zval_dump() */
107$counter = 1;
108foreach( $misc_values as $value ) {
109  echo "-- Iteration $counter --\n";
110  debug_zval_dump( $value );
111  $counter++;
112}
113
114echo "Done\n";
115?>
116--EXPECTF--
117*** Testing debug_zval_dump() on functions ***
118--- Variation 1: global variable inside a function ---
119
120-- Value of global variable, before calling dump_globalvar() --
121int(10)
122
123-- Value of local variable inside dump_globalvar() --
124int(10)
125
126-- Value of global variable inside dump_globalvar() --
127int(10)
128
129-- Value of global variable, after exiting dump_globalvar() --
130int(10)
131
132--- Variation 2: one variable references another ---
133
134-- Value of $first_var: --
135int(10)
136
137-- Value of $ref_first_var --
138NULL
139
140-- Value of $first_var --
141int(10)
142
143-- Value of $ref_first_var --
144
145Warning: Undefined variable $ref_first_var in %s on line %d
146NULL
147
148-- Value of $first_var --
149int(10)
150
151--- Variation 3: multiple references of variables ---
152
153-- Value of $var_1: (before referencing) --
154int(10)
155
156-- Value of $var_2: (referencing var_1) --
157int(10)
158
159-- Value of $var_3: (referencing var_2) --
160int(10)
161
162-- Value of $var_3: (after unsetting var_3) --
163
164Warning: Undefined variable $var_3 in %s on line %d
165NULL
166
167-- Value of $var_2: --
168int(10)
169
170-- Value of $var_3: --
171int(10)
172
173-- Value of $var_1: (after unsetting variable_1) --
174
175Warning: Undefined variable $var_1 in %s on line %d
176NULL
177
178-- Value of $var_2: --
179int(10)
180
181*** Testing debug_zval_dump() on miscellaneous input arguments ***
182-- Iteration 1 --
183NULL
184-- Iteration 2 --
185NULL
186-- Iteration 3 --
187NULL
188-- Iteration 4 --
189NULL
190-- Iteration 5 --
191string(7) "TRUE123" refcount(%d)
192-- Iteration 6 --
193string(9) "123string" refcount(%d)
194-- Iteration 7 --
195string(9) "string123" refcount(%d)
196-- Iteration 8 --
197string(10) "NULLstring" refcount(%d)
198Done
199