@@ -386,51 +386,55 @@ private static function parseMapping($mapping, &$i = 0)
386
386
private static function evaluateScalar ($ scalar )
387
387
{
388
388
$ scalar = trim ($ scalar );
389
-
389
+ $ scalarLower = strtolower ( $ scalar );
390
390
switch (true ) {
391
- case 'null ' == strtolower ( $ scalar ) :
391
+ case 'null ' == $ scalarLower :
392
392
case '' == $ scalar :
393
393
case '~ ' == $ scalar :
394
394
return null ;
395
- case 0 === strpos ($ scalar , '!str ' ):
396
- return (string ) substr ($ scalar , 5 );
397
- case 0 === strpos ($ scalar , '! ' ):
398
- return intval (self ::parseScalar (substr ($ scalar , 2 )));
399
- case 0 === strpos ($ scalar , '!!php/object: ' ):
400
- if (self ::$ objectSupport ) {
401
- return unserialize (substr ($ scalar , 13 ));
402
- }
403
-
404
- if (self ::$ exceptionOnInvalidType ) {
405
- throw new ParseException ('Object support when parsing a YAML file has been disabled. ' );
406
- }
407
-
408
- return null ;
409
- case ctype_digit ($ scalar ):
410
- $ raw = $ scalar ;
411
- $ cast = intval ($ scalar );
412
-
413
- return '0 ' == $ scalar [0 ] ? octdec ($ scalar ) : (((string ) $ raw == (string ) $ cast ) ? $ cast : $ raw );
414
- case '- ' === $ scalar [0 ] && ctype_digit (substr ($ scalar , 1 )):
415
- $ raw = $ scalar ;
416
- $ cast = intval ($ scalar );
417
-
418
- return '0 ' == $ scalar [1 ] ? octdec ($ scalar ) : (((string ) $ raw == (string ) $ cast ) ? $ cast : $ raw );
419
- case 'true ' === strtolower ($ scalar ):
395
+ case 'true ' === $ scalarLower :
420
396
return true ;
421
- case 'false ' === strtolower ( $ scalar ) :
397
+ case 'false ' === $ scalarLower :
422
398
return false ;
423
- case is_numeric ($ scalar ):
424
- return '0x ' == $ scalar [0 ].$ scalar [1 ] ? hexdec ($ scalar ) : floatval ($ scalar );
425
- case 0 == strcasecmp ($ scalar , '.inf ' ):
426
- case 0 == strcasecmp ($ scalar , '.NaN ' ):
427
- return -log (0 );
428
- case 0 == strcasecmp ($ scalar , '-.inf ' ):
429
- return log (0 );
430
- case preg_match ('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/ ' , $ scalar ):
431
- return floatval (str_replace (', ' , '' , $ scalar ));
432
- case preg_match (self ::getTimestampRegex (), $ scalar ):
433
- return strtotime ($ scalar );
399
+ // Optimise for returning strings.
400
+ case $ scalar [0 ] === '+ ' || $ scalar [0 ] === '- ' || $ scalar [0 ] === '. ' || $ scalar [0 ] === '! ' || is_numeric ($ scalar [0 ]):
401
+ switch (true ) {
402
+ case 0 === strpos ($ scalar , '!str ' ):
403
+ return (string ) substr ($ scalar , 5 );
404
+ case 0 === strpos ($ scalar , '! ' ):
405
+ return intval (self ::parseScalar (substr ($ scalar , 2 )));
406
+ case 0 === strpos ($ scalar , '!!php/object: ' ):
407
+ if (self ::$ objectSupport ) {
408
+ return unserialize (substr ($ scalar , 13 ));
409
+ }
410
+
411
+ if (self ::$ exceptionOnInvalidType ) {
412
+ throw new ParseException ('Object support when parsing a YAML file has been disabled. ' );
413
+ }
414
+
415
+ return null ;
416
+ case ctype_digit ($ scalar ):
417
+ $ raw = $ scalar ;
418
+ $ cast = intval ($ scalar );
419
+
420
+ return '0 ' == $ scalar [0 ] ? octdec ($ scalar ) : (((string ) $ raw == (string ) $ cast ) ? $ cast : $ raw );
421
+ case '- ' === $ scalar [0 ] && ctype_digit (substr ($ scalar , 1 )):
422
+ $ raw = $ scalar ;
423
+ $ cast = intval ($ scalar );
424
+
425
+ return '0 ' == $ scalar [1 ] ? octdec ($ scalar ) : (((string ) $ raw == (string ) $ cast ) ? $ cast : $ raw );
426
+ case is_numeric ($ scalar ):
427
+ return '0x ' == $ scalar [0 ].$ scalar [1 ] ? hexdec ($ scalar ) : floatval ($ scalar );
428
+ case 0 == strcasecmp ($ scalar , '.inf ' ):
429
+ case 0 == strcasecmp ($ scalar , '.NaN ' ):
430
+ return -log (0 );
431
+ case 0 == strcasecmp ($ scalar , '-.inf ' ):
432
+ return log (0 );
433
+ case preg_match ('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/ ' , $ scalar ):
434
+ return floatval (str_replace (', ' , '' , $ scalar ));
435
+ case preg_match (self ::getTimestampRegex (), $ scalar ):
436
+ return strtotime ($ scalar );
437
+ }
434
438
default :
435
439
return (string ) $ scalar ;
436
440
}
0 commit comments