Skip to content

Commit 1e45b50

Browse files
committed
Fix php#8232 - always reference classes in var_export() via their FQCN
This fix corrects a behavior of `var_export()` that was mostly "hidden" until PHP 8.1 introduced: * properties with object initializers * constants containing object references * default values of class properties containing `enum`s Since `var_export(..., true)` is mostly used in conjunction with code generation, and we cannot make assumptions about the generated code being placed in the root namespace, we must always provide the FQCN of a class in exported code. For example: ```php <?php namespace MyNamespace { class Foo {} } namespace { echo "<?php\n\nnamespace Example;\n\n" . var_export(new \MyNamespace\Foo(), true) . ';'; } ``` produces: ```php <?php namespace Example; MyNamespace\Foo::__set_state(array( )); ``` This code snippet is invalid, because `Example\MyNamespace\Foo::__set_state()` (which does not exist) is called. With this patch applied, the code looks like following (valid): ```php <?php namespace Example; \MyNamespace\Foo::__set_state(array( )); ``` Ref: php#8232 Ref: Ocramius/ProxyManager#754
1 parent 21b0da8 commit 1e45b50

20 files changed

+684
-655
lines changed

Zend/tests/bug73350.phpt

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ $e = new Exception();
1212
var_export($e);
1313
?>
1414
--EXPECTF--
15-
Exception::__set_state(array(
15+
\Exception::__set_state(array(
1616
'message' => '',
1717
'string' => 'Exception in %sbug73350.php:%d
1818
Stack trace:
1919
#0 {main}',
2020
'code' => 0,
2121
'file' => '%sbug73350.php',
2222
'line' => %d,
23-
'trace' =>
23+
'trace' =>
2424
array (
2525
),
2626
'previous' => NULL,
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
Enum in var_export()
3+
--FILE--
4+
<?php
5+
6+
namespace {
7+
enum Foo { case BAR; }
8+
}
9+
10+
namespace A {
11+
enum Foo { case BAR; }
12+
}
13+
14+
namespace A\B {
15+
enum Foo { case BAR; }
16+
}
17+
18+
namespace Test {
19+
var_export(\Foo::BAR);
20+
var_export(\A\Foo::BAR);
21+
var_export(\A\B\Foo::BAR);
22+
}
23+
24+
?>
25+
--EXPECT--
26+
\Foo::BAR
27+
\A\Foo::BAR
28+
\A\B\Foo::BAR

ext/date/tests/bug52113.phpt

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ $diff_un = unserialize($diff_s);
1616
$p = new DatePeriod($start, $diff_un, 2);
1717
var_dump($diff_un, $p);
1818

19-
$unser = DateInterval::__set_state(array(
19+
$unser = \DateInterval::__set_state(array(
2020
'y' => 7,
2121
'm' => 6,
2222
'd' => 5,
@@ -68,7 +68,7 @@ object(DateInterval)#%d (16) {
6868
int(0)
6969
}
7070
string(332) "O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h";i:4;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";i:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}"
71-
DateInterval::__set_state(array(
71+
\DateInterval::__set_state(array(
7272
'y' => 0,
7373
'm' => 0,
7474
'd' => 0,

ext/intl/tests/dateformat_format.phpt

+68-68
Original file line numberDiff line numberDiff line change
@@ -157,240 +157,240 @@ ut_run();
157157
Input timestamp is : 0
158158
------------
159159

160-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
160+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
161161
Formatted timestamp is : Wednesday, December 31, 1969 2:00:00 PM GMT-10:00
162-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
162+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
163163
Formatted timestamp is : December 31, 1969 2:00:00 PM GMT-10:00
164-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
164+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
165165
Formatted timestamp is : Dec 31, 1969 2:00:00 PM
166-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
166+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
167167
Formatted timestamp is : 12/31/69 2:00 PM
168-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
168+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
169169
Formatted timestamp is : 19691231 02:00 PM
170170
------------
171171

172172
Input timestamp is : -1200000
173173
------------
174174

175-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
175+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
176176
Formatted timestamp is : Wednesday, December 17, 1969 4:40:00 PM GMT-10:00
177-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
177+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
178178
Formatted timestamp is : December 17, 1969 4:40:00 PM GMT-10:00
179-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
179+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
180180
Formatted timestamp is : Dec 17, 1969 4:40:00 PM
181-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
181+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
182182
Formatted timestamp is : 12/17/69 4:40 PM
183-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
183+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
184184
Formatted timestamp is : 19691217 04:40 PM
185185
------------
186186

187187
Input timestamp is : 1200000
188188
------------
189189

190-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
190+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
191191
Formatted timestamp is : Wednesday, January 14, 1970 11:20:00 AM GMT-10:00
192-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
192+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
193193
Formatted timestamp is : January 14, 1970 11:20:00 AM GMT-10:00
194-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
194+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
195195
Formatted timestamp is : Jan 14, 1970 11:20:00 AM
196-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
196+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
197197
Formatted timestamp is : 1/14/70 11:20 AM
198-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
198+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
199199
Formatted timestamp is : 19700114 11:20 AM
200200
------------
201201

202202
Input timestamp is : 2200000000
203203
------------
204204

205-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
205+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
206206
Formatted timestamp is : Sunday, September 18, 2039 1:06:40 PM GMT-10:00
207-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
207+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
208208
Formatted timestamp is : September 18, 2039 1:06:40 PM GMT-10:00
209-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
209+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
210210
Formatted timestamp is : Sep 18, 2039 1:06:40 PM
211-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
211+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
212212
Formatted timestamp is : 9/18/39 1:06 PM
213-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
213+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
214214
Formatted timestamp is : 20390918 01:06 PM
215215
------------
216216

217217
Input timestamp is : -2200000000
218218
------------
219219

220-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
220+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
221221
Formatted timestamp is : Saturday, April 14, 1900 2:53:20 PM GMT-10:00
222-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
222+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
223223
Formatted timestamp is : April 14, 1900 2:53:20 PM GMT-10:00
224-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
224+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
225225
Formatted timestamp is : Apr 14, 1900 2:53:20 PM
226-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
226+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
227227
Formatted timestamp is : 4/14/00 2:53 PM
228-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
228+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
229229
Formatted timestamp is : 19000414 02:53 PM
230230
------------
231231

232232
Input timestamp is : 90099999
233233
------------
234234

235-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
235+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
236236
Formatted timestamp is : Wednesday, November 8, 1972 9:46:39 AM GMT-10:00
237-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
237+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
238238
Formatted timestamp is : November 8, 1972 9:46:39 AM GMT-10:00
239-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
239+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
240240
Formatted timestamp is : Nov 8, 1972 9:46:39 AM
241-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
241+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
242242
Formatted timestamp is : 11/8/72 9:46 AM
243-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
243+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
244244
Formatted timestamp is : 19721108 09:46 AM
245245
------------
246246

247247
Input timestamp is : 3600
248248
------------
249249

250-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
250+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
251251
Formatted timestamp is : Wednesday, December 31, 1969 3:00:00 PM GMT-10:00
252-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
252+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
253253
Formatted timestamp is : December 31, 1969 3:00:00 PM GMT-10:00
254-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
254+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
255255
Formatted timestamp is : Dec 31, 1969 3:00:00 PM
256-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
256+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
257257
Formatted timestamp is : 12/31/69 3:00 PM
258-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
258+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
259259
Formatted timestamp is : 19691231 03:00 PM
260260
------------
261261

262262
Input timestamp is : -3600
263263
------------
264264

265-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
265+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
266266
Formatted timestamp is : Wednesday, December 31, 1969 1:00:00 PM GMT-10:00
267-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
267+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
268268
Formatted timestamp is : December 31, 1969 1:00:00 PM GMT-10:00
269-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
269+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
270270
Formatted timestamp is : Dec 31, 1969 1:00:00 PM
271-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
271+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
272272
Formatted timestamp is : 12/31/69 1:00 PM
273-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
273+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
274274
Formatted timestamp is : 19691231 01:00 PM
275275
------------
276276

277-
Input localtime is : tm_sec : '24' , tm_min : '3' , tm_hour : '19' , tm_mday : '3' , tm_mon : '3' , tm_year : '105' ,
277+
Input localtime is : tm_sec : '24' , tm_min : '3' , tm_hour : '19' , tm_mday : '3' , tm_mon : '3' , tm_year : '105' ,
278278
------------
279279

280-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
280+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
281281
Formatted localtime_array is : Sunday, April 3, 2005 7:03:24 PM GMT-10:00
282-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
282+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
283283
Formatted localtime_array is : April 3, 2005 7:03:24 PM GMT-10:00
284-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
284+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
285285
Formatted localtime_array is : Apr 3, 2005 7:03:24 PM
286-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
286+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
287287
Formatted localtime_array is : 4/3/05 7:03 PM
288-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
288+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
289289
Formatted localtime_array is : 20050403 07:03 PM
290290
------------
291291

292-
Input localtime is : tm_sec : '21' , tm_min : '5' , tm_hour : '7' , tm_mday : '13' , tm_mon : '4' , tm_year : '205' ,
292+
Input localtime is : tm_sec : '21' , tm_min : '5' , tm_hour : '7' , tm_mday : '13' , tm_mon : '4' , tm_year : '205' ,
293293
------------
294294

295-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
295+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
296296
Formatted localtime_array is : Wednesday, May 13, 2105 7:05:21 AM GMT-10:00
297-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
297+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
298298
Formatted localtime_array is : May 13, 2105 7:05:21 AM GMT-10:00
299-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
299+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
300300
Formatted localtime_array is : May 13, 2105 7:05:21 AM
301-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
301+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
302302
Formatted localtime_array is : 5/13/05 7:05 AM
303-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
303+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
304304
Formatted localtime_array is : 21050513 07:05 AM
305305
------------
306306

307-
Input localtime is : tm_sec : '11' , tm_min : '13' , tm_hour : '0' , tm_mday : '17' , tm_mon : '11' , tm_year : '-5' ,
307+
Input localtime is : tm_sec : '11' , tm_min : '13' , tm_hour : '0' , tm_mday : '17' , tm_mon : '11' , tm_year : '-5' ,
308308
------------
309309

310-
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
310+
IntlDateFormatter locale= en_US ,datetype = 0 ,timetype =0
311311
Formatted localtime_array is : Tuesday, December 17, 1895 12:13:11 AM GMT-10:00
312-
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
312+
IntlDateFormatter locale= en_US ,datetype = 1 ,timetype =1
313313
Formatted localtime_array is : December 17, 1895 12:13:11 AM GMT-10:00
314-
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
314+
IntlDateFormatter locale= en_US ,datetype = 2 ,timetype =2
315315
Formatted localtime_array is : Dec 17, 1895 12:13:11 AM
316-
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
316+
IntlDateFormatter locale= en_US ,datetype = 3 ,timetype =3
317317
Formatted localtime_array is : 12/17/95 12:13 AM
318-
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
318+
IntlDateFormatter locale= en_US ,datetype = -1 ,timetype =-1
319319
Formatted localtime_array is : 18951217 12:13 AM
320320
------------
321-
Date is: DateTime::__set_state(array(
321+
Date is: \DateTime::__set_state(array(
322322
'date' => '2010-01-01 01:02:03.000000',
323323
'timezone_type' => 3,
324324
'timezone' => 'UTC',
325325
))
326326
------------
327327
Formatted DateTime is : Thursday, December 31, 2009 3:02:03 PM GMT-10:00
328328
------------
329-
Date is: DateTime::__set_state(array(
329+
Date is: \DateTime::__set_state(array(
330330
'date' => '2010-01-01 01:02:03.000000',
331331
'timezone_type' => 3,
332332
'timezone' => 'UTC',
333333
))
334334
------------
335335
Formatted DateTime is : December 31, 2009 3:02:03 PM GMT-10:00
336336
------------
337-
Date is: DateTime::__set_state(array(
337+
Date is: \DateTime::__set_state(array(
338338
'date' => '2010-01-01 01:02:03.000000',
339339
'timezone_type' => 3,
340340
'timezone' => 'UTC',
341341
))
342342
------------
343343
Formatted DateTime is : Dec 31, 2009 3:02:03 PM
344344
------------
345-
Date is: DateTime::__set_state(array(
345+
Date is: \DateTime::__set_state(array(
346346
'date' => '2010-01-01 01:02:03.000000',
347347
'timezone_type' => 3,
348348
'timezone' => 'UTC',
349349
))
350350
------------
351351
Formatted DateTime is : 12/31/09 3:02 PM
352352
------------
353-
Date is: DateTime::__set_state(array(
353+
Date is: \DateTime::__set_state(array(
354354
'date' => '2010-01-01 01:02:03.000000',
355355
'timezone_type' => 3,
356356
'timezone' => 'UTC',
357357
))
358358
------------
359359
Formatted DateTime is : 20091231 03:02 PM
360360
------------
361-
Date is: DateTime::__set_state(array(
361+
Date is: \DateTime::__set_state(array(
362362
'date' => '2000-12-30 19:04:05.000000',
363363
'timezone_type' => 2,
364364
'timezone' => 'PDT',
365365
))
366366
------------
367367
Formatted DateTime is : Saturday, December 30, 2000 5:04:05 PM GMT-10:00
368368
------------
369-
Date is: DateTime::__set_state(array(
369+
Date is: \DateTime::__set_state(array(
370370
'date' => '2000-12-30 19:04:05.000000',
371371
'timezone_type' => 2,
372372
'timezone' => 'PDT',
373373
))
374374
------------
375375
Formatted DateTime is : December 30, 2000 5:04:05 PM GMT-10:00
376376
------------
377-
Date is: DateTime::__set_state(array(
377+
Date is: \DateTime::__set_state(array(
378378
'date' => '2000-12-30 19:04:05.000000',
379379
'timezone_type' => 2,
380380
'timezone' => 'PDT',
381381
))
382382
------------
383383
Formatted DateTime is : Dec 30, 2000 5:04:05 PM
384384
------------
385-
Date is: DateTime::__set_state(array(
385+
Date is: \DateTime::__set_state(array(
386386
'date' => '2000-12-30 19:04:05.000000',
387387
'timezone_type' => 2,
388388
'timezone' => 'PDT',
389389
))
390390
------------
391391
Formatted DateTime is : 12/30/00 5:04 PM
392392
------------
393-
Date is: DateTime::__set_state(array(
393+
Date is: \DateTime::__set_state(array(
394394
'date' => '2000-12-30 19:04:05.000000',
395395
'timezone_type' => 2,
396396
'timezone' => 'PDT',

0 commit comments

Comments
 (0)