@@ -3,7 +3,11 @@ Tests an exhaustive list of valid expressions containing the default keyword
3
3
--FILE--
4
4
<?php
5
5
6
+ class C {}
6
7
function F ($ V = 2 ) { return $ V ; }
8
+ function FA ($ V = ['Alfa ' , 'Bravo ' ]) { return $ V ; }
9
+ function FE ($ V = new Exception ) { return $ V ; }
10
+ function FO ($ V = new C ) { return $ V ; }
7
11
8
12
echo "Numeric binary operators (LHS) \n" ;
9
13
var_dump (F (default + 1 ));
@@ -63,6 +67,25 @@ var_dump(F(0 ?: default));
63
67
var_dump (F (default ?? 0 ));
64
68
var_dump (F (null ?? default));
65
69
70
+ echo "\nVariable assignment \n" ;
71
+ F ($ V = default); var_dump ($ V );
72
+ F ($ V += default); var_dump ($ V );
73
+ F ($ V -= default); var_dump ($ V );
74
+ F ($ V *= default); var_dump ($ V );
75
+ F ($ V **= default); var_dump ($ V );
76
+ F ($ V /= default); var_dump ($ V );
77
+ F ($ V <<= default); var_dump ($ V );
78
+ F ($ V >>= default); var_dump ($ V );
79
+ F ($ V %= default); var_dump ($ V );
80
+ F ($ V &= default); var_dump ($ V );
81
+ F ($ V |= default); var_dump ($ V );
82
+ F ($ V ^= default); var_dump ($ V );
83
+ F ($ V .= default); var_dump ($ V );
84
+ F ($ U ??= default); var_dump ($ U );
85
+ FA (list ($ V ) = default); var_dump ($ V );
86
+ FA ([, $ V ] = default); var_dump ($ V );
87
+ // TODO: Variable expressions?
88
+
66
89
echo "\nCasts \n" ;
67
90
var_dump (F ((int )default));
68
91
var_dump (F ((double )default));
@@ -71,22 +94,42 @@ var_dump(F((array)default));
71
94
var_dump (F ((object )default));
72
95
var_dump (F ((bool )default));
73
96
97
+ echo "\nParens \n" ;
98
+ var_dump (F ((((default)))));
99
+
74
100
echo "\nInternal functions \n" ;
75
101
var_dump (F (empty (default)));
76
102
// eval() makes no sense.
77
103
// exit() makes no sense.
78
104
// TODO?
79
- // include()
80
- // include_once()
81
- // require()
82
- // require_once()
105
+ // include
106
+ // include_once
107
+ // require
108
+ // require_once
83
109
84
110
echo "\nMatch tier \n" ;
85
111
var_dump (F (match (default) { default => default }));
86
112
var_dump (F (match (default) { 2 => 3 }));
87
113
114
+ echo "\nInstanceof tier \n" ;
115
+ var_dump (FO (default instanceof C));
116
+ var_dump (FO (default instanceof D));
117
+
118
+ echo "\nClone tier \n" ;
119
+ var_dump (FO (clone default));
120
+
121
+ echo "\nThrow tier \n" ;
122
+ try {
123
+ FE (throw default);
124
+ } catch (Exception $ E ) {
125
+ var_dump ($ E ::class);
126
+ }
127
+
88
128
echo "\nPrint tier \n" ;
89
129
var_dump (F (print default));
130
+
131
+ // TODO: Silence operator?
132
+
90
133
?>
91
134
--EXPECT--
92
135
Numeric binary operators (LHS)
@@ -147,6 +190,24 @@ int(2)
147
190
int(2)
148
191
int(2)
149
192
193
+ Variable assignment
194
+ int(2)
195
+ int(4)
196
+ int(2)
197
+ int(4)
198
+ int(16)
199
+ int(8)
200
+ int(32)
201
+ int(8)
202
+ int(0)
203
+ int(0)
204
+ int(2)
205
+ int(0)
206
+ string(2) "02"
207
+ int(2)
208
+ string(4) "Alfa"
209
+ string(5) "Bravo"
210
+
150
211
Casts
151
212
int(2)
152
213
float(2)
@@ -161,12 +222,26 @@ object(stdClass)#1 (1) {
161
222
}
162
223
bool(true)
163
224
225
+ Parens
226
+ int(2)
227
+
164
228
Internal functions
165
229
bool(false)
166
230
167
231
Match tier
168
232
int(2)
169
233
int(3)
170
234
235
+ Instanceof tier
236
+ bool(true)
237
+ bool(false)
238
+
239
+ Clone tier
240
+ object(C)#2 (0) {
241
+ }
242
+
243
+ Throw tier
244
+ string(9) "Exception"
245
+
171
246
Print tier
172
247
2int(1)
0 commit comments