@@ -349,24 +349,44 @@ private static function exportDefault(\ReflectionParameter $param): string
349
349
350
350
$ regexp = '/([\[\( ]|^)([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?: \\\\[a-zA-Z0-9_\x7f-\xff]++)*+)(?!: )/ ' ;
351
351
$ callback = (false !== strpbrk ($ default , "\\:(' " ) && $ class = $ param ->getDeclaringClass ())
352
- ? fn ($ m ) => $ m [1 ].match ($ m [2 ]) {
352
+ ? ( fn ($ m ) => $ m [1 ].match ($ m [2 ]) {
353
353
'new ' , 'false ' , 'true ' , 'null ' => $ m [2 ],
354
- 'NULL ' => 'null ' ,
355
354
'self ' => '\\' .$ class ->name ,
356
355
'namespace \\parent ' ,
357
356
'parent ' => ($ parent = $ class ->getParentClass ()) ? '\\' .$ parent ->name : 'parent ' ,
358
- default => '\\' . $ m [2 ],
359
- }
360
- : fn ($ m ) => $ m [1 ].match ($ m [2 ]) {
357
+ default => self :: exportDefaultValue ( $ param , $ m [2 ]) ,
358
+ })
359
+ : ( fn ($ m ) => $ m [1 ].match ($ m [2 ]) {
361
360
'new ' , 'false ' , 'true ' , 'null ' , 'self ' , 'parent ' => $ m [2 ],
362
- 'NULL ' => 'null ' ,
363
- default => '\\' .$ m [2 ],
364
- };
361
+ default => self ::exportDefaultValue ($ param , $ m [2 ]),
362
+ });
365
363
366
364
return implode ('' , array_map (fn ($ part ) => match ($ part [0 ]) {
367
365
'" ' => $ part , // for internal classes only
368
366
"' " => false !== strpbrk ($ part , "\\\0\r\n" ) ? '" ' .substr (str_replace (['$ ' , "\0" , "\r" , "\n" ], ['\$ ' , '\0 ' , '\r ' , '\n ' ], $ part ), 1 , -1 ).'" ' : $ part ,
369
367
default => preg_replace_callback ($ regexp , $ callback , $ part ),
370
368
}, $ parts ));
371
369
}
370
+
371
+ private static function exportDefaultValue (\ReflectionParameter $ param , string $ value ): string
372
+ {
373
+ if ('NULL ' === $ value ) {
374
+ return 'null ' ;
375
+ }
376
+
377
+ if (
378
+ $ param ->isDefaultValueConstant ()
379
+ && $ value === $ param ->getDefaultValueConstantName ()
380
+ && str_contains ($ value , '\\' )
381
+ && !\defined ($ value )
382
+ ) {
383
+ $ globalConstant = '\\' .preg_replace ('/^.* \\\\([^ \\\\]+)$/ ' , '$1 ' , $ value );
384
+
385
+ if (\defined ($ globalConstant ) && $ param ->getDefaultValue () === \constant ($ globalConstant )) {
386
+ return $ globalConstant ;
387
+ }
388
+ }
389
+
390
+ return '\\' .$ value ;
391
+ }
372
392
}
0 commit comments