Hi Nikita, Through Xdebug bug #1413 (https://bugs.xdebug.org/view.php?id=1413), I noticed that behaviour with class constants changed between PHP 7.1.3 and PHP 7.1.4. I *believe* it is because of the fix for issue #69676 (https://bugs.php.net/bug.php?id=69676) that got fixed in PHP 7.1.4.
With OPcache loaded, the INIT_ARRAY and further opcodes are relisted as being on line 15 instead of line 17. Although, I would probably argue that INIT_ARRAY should really be on line 13 (the opening [). Without OPcache loaded, in PHP 7.1.3, FETCH_CLASS_CONSTANT is on line 15, and the INIT_ARRAY and further opcodes are on line 17. In PHP 7.1.4, they are all on line 15 - with 17 no longer showing up. I believe, the behaviour with and without OPcache should be the same, and I would argue that the correct result would need to be that FETCH_CLASS_CONSTANT (if still present, OPcache optimises it out) should be on line 15, the INIT_ARRAY on line 13, and the SEND_VAL_EX and further, are on line 17. Code ==== 1 <?php 2 3 namespace ICanBoogie\Validate\Validator; 4 5 class Required2 6 { 7 const ALIAS = 'required'; 8 const DEFAULT_MESSAGE = "is required"; 9 const OPTION_STOP_ON_ERROR = 'stop_on_error'; 10 11 public function normalize_params(array $params) 12 { 13 return array_merge([ 14 15 self::OPTION_STOP_ON_ERROR => true 16 17 ], $params); 18 } 19 } PHP 7.1.3 (no OPcache) ====================== filename: /tmp/xdebug-bug-1/lib/Required2.php function name: normalize_params number of ops: 14 compiled vars: !0 = $params line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 11 0 E > EXT_NOP 1 RECV !0 13 2 EXT_STMT 3 INIT_NS_FCALL_BY_NAME 4 EXT_FCALL_BEGIN 15 5 FETCH_CLASS_CONSTANT ~1 'OPTION_STOP_ON_ERROR' 17 6 INIT_ARRAY ~2 <true>, ~1 7 SEND_VAL_EX ~2 8 SEND_VAR_EX !0 9 DO_FCALL_BY_NAME 10 EXT_FCALL_END 11 > RETURN $3 18 12* EXT_STMT 13* > RETURN null PHP 7.1.3 (OPcache) ====================== filename: /tmp/xdebug-bug-1/lib/Required2.php function name: normalize_params number of ops: 11 compiled vars: !0 = $params line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 11 0 E > EXT_NOP 1 RECV !0 13 2 EXT_STMT 3 INIT_NS_FCALL_BY_NAME 4 EXT_FCALL_BEGIN 17 5 INIT_ARRAY ~1 <true>, 'stop_on_error' 6 SEND_VAL_EX ~1 7 SEND_VAR_EX !0 8 DO_FCALL 0 $1 9 EXT_FCALL_END 10 > RETURN $1 PHP 7.1.4 (no OPcache) ====================== filename: /tmp/xdebug-bug-1/lib/Required2.php function name: normalize_params number of ops: 14 compiled vars: !0 = $params line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 11 0 E > EXT_NOP 1 RECV !0 13 2 EXT_STMT 3 INIT_NS_FCALL_BY_NAME 4 EXT_FCALL_BEGIN 15 5 FETCH_CLASS_CONSTANT ~1 'OPTION_STOP_ON_ERROR' 6 INIT_ARRAY ~2 <true>, ~1 7 SEND_VAL_EX ~2 8 SEND_VAR_EX !0 9 DO_FCALL_BY_NAME 10 EXT_FCALL_END 11 > RETURN $3 18 12* EXT_STMT 13* > RETURN null PHP 7.1.4 (OPcache) ====================== filename: /tmp/xdebug-bug-1/lib/Required2.php function name: normalize_params number of ops: 11 compiled vars: !0 = $params line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 11 0 E > EXT_NOP 1 RECV !0 13 2 EXT_STMT 3 INIT_NS_FCALL_BY_NAME 4 EXT_FCALL_BEGIN 15 5 INIT_ARRAY ~1 <true>, 'stop_on_error' 6 SEND_VAL_EX ~1 7 SEND_VAR_EX !0 8 DO_FCALL 0 $1 9 EXT_FCALL_END 10 > RETURN $1 cheers, Derick -- https://derickrethans.nl | https://xdebug.org | https://dram.io Like Xdebug? Consider a donation: https://xdebug.org/donate.php twitter: @derickr and @xdebug -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php