3v4l.org

run code in 300+ PHP versions simultaneously
<?php Tokens::polyfillTokenizerConstants(); Tokens::dumpMap(); Tokens::polyfillTokenizerConstants(); Tokens::dumpMap(); class Tokens { /** * Mapping table for polyfilled constants * * @var array<int, string> */ private static $polyfillMappingTable = []; public static function tokenName($token) { if (is_string($token) === true) { // PHPCS native token. return substr($token, 6); } return (self::$polyfillMappingTable[$token] ?? token_name($token)); } public static function dumpMap() { var_dump(self::$polyfillMappingTable); } /** * Polyfill tokenizer (T_*) constants. * * {@internal IMPORTANT: all PHP native polyfilled tokens MUST be added to the * `PHP_CodeSniffer\Tests\Core\Util\Tokens\TokenNameTest::dataPolyfilledPHPNativeTokens()` test method!} * * @return void */ public static function polyfillTokenizerConstants(): void { // Ideally this would be a private class constant. We cannot do that // here as the constants that we are polyfilling in this method are // used in some of the class constants for this class. If we reference // any class constants or properties before this method has fully run, // PHP will intitialise the class, leading to warnings about undefined // T_* constants. $tokensToPolyfill = [ 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG', 'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG', 'T_ATTRIBUTE', 'T_BAD_CHARACTER', 'T_COALESCE_EQUAL', 'T_ENUM', 'T_FN', 'T_MATCH', 'T_NAME_FULLY_QUALIFIED', 'T_NAME_QUALIFIED', 'T_NAME_RELATIVE', 'T_NULLSAFE_OBJECT_OPERATOR', 'T_PRIVATE_SET', 'T_PROTECTED_SET', 'T_PUBLIC_SET', 'T_READONLY', ]; // <https://www.php.net/manual/en/tokens.php> // The PHP manual suggests "using big numbers like 10000" for // polyfilled T_* constants. We have arbitrarily chosen to start our // numbering scheme from 135_000. $nextTokenNumber = 135000; $polyfillMappingTable = []; foreach ($tokensToPolyfill as $tokenName) { if (defined($tokenName) === false) { while (isset($polyfillMappingTable[$nextTokenNumber]) === true) { $nextTokenNumber++; } define($tokenName, $nextTokenNumber); } $polyfillMappingTable[constant($tokenName)] = $tokenName; } // Be careful to not reference this class anywhere in this method until // *after* all constants have been polyfilled. self::$polyfillMappingTable = $polyfillMappingTable; } }
Output for 8.5.0
array(16) { [409]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [410]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [355]=> string(11) "T_ATTRIBUTE" [411]=> string(15) "T_BAD_CHARACTER" [367]=> string(16) "T_COALESCE_EQUAL" [339]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [390]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [327]=> string(13) "T_PRIVATE_SET" [328]=> string(15) "T_PROTECTED_SET" [329]=> string(12) "T_PUBLIC_SET" [330]=> string(10) "T_READONLY" } array(16) { [409]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [410]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [355]=> string(11) "T_ATTRIBUTE" [411]=> string(15) "T_BAD_CHARACTER" [367]=> string(16) "T_COALESCE_EQUAL" [339]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [390]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [327]=> string(13) "T_PRIVATE_SET" [328]=> string(15) "T_PROTECTED_SET" [329]=> string(12) "T_PUBLIC_SET" [330]=> string(10) "T_READONLY" }
Output for 8.4.1 - 8.4.15
array(16) { [407]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [408]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [355]=> string(11) "T_ATTRIBUTE" [409]=> string(15) "T_BAD_CHARACTER" [367]=> string(16) "T_COALESCE_EQUAL" [339]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [389]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [327]=> string(13) "T_PRIVATE_SET" [328]=> string(15) "T_PROTECTED_SET" [329]=> string(12) "T_PUBLIC_SET" [330]=> string(10) "T_READONLY" } array(16) { [407]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [408]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [355]=> string(11) "T_ATTRIBUTE" [409]=> string(15) "T_BAD_CHARACTER" [367]=> string(16) "T_COALESCE_EQUAL" [339]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [389]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [327]=> string(13) "T_PRIVATE_SET" [328]=> string(15) "T_PROTECTED_SET" [329]=> string(12) "T_PUBLIC_SET" [330]=> string(10) "T_READONLY" }
Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.1, 8.3.3, 8.3.5 - 8.3.6, 8.3.8, 8.3.10, 8.3.12, 8.3.14, 8.3.16, 8.3.18 - 8.3.19, 8.3.21, 8.3.23 - 8.3.28
array(16) { [403]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [404]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [351]=> string(11) "T_ATTRIBUTE" [405]=> string(15) "T_BAD_CHARACTER" [363]=> string(16) "T_COALESCE_EQUAL" [336]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [385]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135000]=> string(13) "T_PRIVATE_SET" [135001]=> string(15) "T_PROTECTED_SET" [135002]=> string(12) "T_PUBLIC_SET" [327]=> string(10) "T_READONLY" } array(16) { [403]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [404]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [351]=> string(11) "T_ATTRIBUTE" [405]=> string(15) "T_BAD_CHARACTER" [363]=> string(16) "T_COALESCE_EQUAL" [336]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [385]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135000]=> string(13) "T_PRIVATE_SET" [135001]=> string(15) "T_PROTECTED_SET" [135002]=> string(12) "T_PUBLIC_SET" [327]=> string(10) "T_READONLY" }
Output for 8.3.0, 8.3.2, 8.3.4, 8.3.7, 8.3.9, 8.3.11, 8.3.13, 8.3.15, 8.3.17, 8.3.20, 8.3.22
array(16) { [288]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [287]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [387]=> string(11) "T_ATTRIBUTE" [405]=> string(15) "T_BAD_CHARACTER" [283]=> string(16) "T_COALESCE_EQUAL" [372]=> string(6) "T_ENUM" [348]=> string(4) "T_FN" [343]=> string(7) "T_MATCH" [314]=> string(22) "T_NAME_FULLY_QUALIFIED" [316]=> string(16) "T_NAME_QUALIFIED" [315]=> string(15) "T_NAME_RELATIVE" [391]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135000]=> string(13) "T_PRIVATE_SET" [135001]=> string(15) "T_PROTECTED_SET" [135002]=> string(12) "T_PUBLIC_SET" [363]=> string(10) "T_READONLY" } array(16) { [288]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [287]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [387]=> string(11) "T_ATTRIBUTE" [405]=> string(15) "T_BAD_CHARACTER" [283]=> string(16) "T_COALESCE_EQUAL" [372]=> string(6) "T_ENUM" [348]=> string(4) "T_FN" [343]=> string(7) "T_MATCH" [314]=> string(22) "T_NAME_FULLY_QUALIFIED" [316]=> string(16) "T_NAME_QUALIFIED" [315]=> string(15) "T_NAME_RELATIVE" [391]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135000]=> string(13) "T_PRIVATE_SET" [135001]=> string(15) "T_PROTECTED_SET" [135002]=> string(12) "T_PUBLIC_SET" [363]=> string(10) "T_READONLY" }
Output for 8.0.30
array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [349]=> string(11) "T_ATTRIBUTE" [401]=> string(15) "T_BAD_CHARACTER" [361]=> string(16) "T_COALESCE_EQUAL" [135002]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [383]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135003]=> string(13) "T_PRIVATE_SET" [135004]=> string(15) "T_PROTECTED_SET" [135005]=> string(12) "T_PUBLIC_SET" [135006]=> string(10) "T_READONLY" } array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [349]=> string(11) "T_ATTRIBUTE" [401]=> string(15) "T_BAD_CHARACTER" [361]=> string(16) "T_COALESCE_EQUAL" [135002]=> string(6) "T_ENUM" [311]=> string(4) "T_FN" [306]=> string(7) "T_MATCH" [263]=> string(22) "T_NAME_FULLY_QUALIFIED" [265]=> string(16) "T_NAME_QUALIFIED" [264]=> string(15) "T_NAME_RELATIVE" [383]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135003]=> string(13) "T_PRIVATE_SET" [135004]=> string(15) "T_PROTECTED_SET" [135005]=> string(12) "T_PUBLIC_SET" [135006]=> string(10) "T_READONLY" }
Output for 8.0.0 - 8.0.29
array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [383]=> string(11) "T_ATTRIBUTE" [401]=> string(15) "T_BAD_CHARACTER" [283]=> string(16) "T_COALESCE_EQUAL" [135002]=> string(6) "T_ENUM" [346]=> string(4) "T_FN" [341]=> string(7) "T_MATCH" [312]=> string(22) "T_NAME_FULLY_QUALIFIED" [314]=> string(16) "T_NAME_QUALIFIED" [313]=> string(15) "T_NAME_RELATIVE" [387]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135003]=> string(13) "T_PRIVATE_SET" [135004]=> string(15) "T_PROTECTED_SET" [135005]=> string(12) "T_PUBLIC_SET" [135006]=> string(10) "T_READONLY" } array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [383]=> string(11) "T_ATTRIBUTE" [401]=> string(15) "T_BAD_CHARACTER" [283]=> string(16) "T_COALESCE_EQUAL" [135002]=> string(6) "T_ENUM" [346]=> string(4) "T_FN" [341]=> string(7) "T_MATCH" [312]=> string(22) "T_NAME_FULLY_QUALIFIED" [314]=> string(16) "T_NAME_QUALIFIED" [313]=> string(15) "T_NAME_RELATIVE" [387]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135003]=> string(13) "T_PRIVATE_SET" [135004]=> string(15) "T_PROTECTED_SET" [135005]=> string(12) "T_PUBLIC_SET" [135006]=> string(10) "T_READONLY" }
Output for 7.4.0 - 7.4.33
array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [135002]=> string(11) "T_ATTRIBUTE" [395]=> string(15) "T_BAD_CHARACTER" [282]=> string(16) "T_COALESCE_EQUAL" [135003]=> string(6) "T_ENUM" [343]=> string(4) "T_FN" [135004]=> string(7) "T_MATCH" [135005]=> string(22) "T_NAME_FULLY_QUALIFIED" [135006]=> string(16) "T_NAME_QUALIFIED" [135007]=> string(15) "T_NAME_RELATIVE" [135008]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135009]=> string(13) "T_PRIVATE_SET" [135010]=> string(15) "T_PROTECTED_SET" [135011]=> string(12) "T_PUBLIC_SET" [135012]=> string(10) "T_READONLY" } array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [135002]=> string(11) "T_ATTRIBUTE" [395]=> string(15) "T_BAD_CHARACTER" [282]=> string(16) "T_COALESCE_EQUAL" [135003]=> string(6) "T_ENUM" [343]=> string(4) "T_FN" [135004]=> string(7) "T_MATCH" [135005]=> string(22) "T_NAME_FULLY_QUALIFIED" [135006]=> string(16) "T_NAME_QUALIFIED" [135007]=> string(15) "T_NAME_RELATIVE" [135008]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135009]=> string(13) "T_PRIVATE_SET" [135010]=> string(15) "T_PROTECTED_SET" [135011]=> string(12) "T_PUBLIC_SET" [135012]=> string(10) "T_READONLY" }
Output for 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33
array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [135002]=> string(11) "T_ATTRIBUTE" [135003]=> string(15) "T_BAD_CHARACTER" [135004]=> string(16) "T_COALESCE_EQUAL" [135005]=> string(6) "T_ENUM" [135006]=> string(4) "T_FN" [135007]=> string(7) "T_MATCH" [135008]=> string(22) "T_NAME_FULLY_QUALIFIED" [135009]=> string(16) "T_NAME_QUALIFIED" [135010]=> string(15) "T_NAME_RELATIVE" [135011]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135012]=> string(13) "T_PRIVATE_SET" [135013]=> string(15) "T_PROTECTED_SET" [135014]=> string(12) "T_PUBLIC_SET" [135015]=> string(10) "T_READONLY" } array(16) { [135000]=> string(37) "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG" [135001]=> string(41) "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG" [135002]=> string(11) "T_ATTRIBUTE" [135003]=> string(15) "T_BAD_CHARACTER" [135004]=> string(16) "T_COALESCE_EQUAL" [135005]=> string(6) "T_ENUM" [135006]=> string(4) "T_FN" [135007]=> string(7) "T_MATCH" [135008]=> string(22) "T_NAME_FULLY_QUALIFIED" [135009]=> string(16) "T_NAME_QUALIFIED" [135010]=> string(15) "T_NAME_RELATIVE" [135011]=> string(26) "T_NULLSAFE_OBJECT_OPERATOR" [135012]=> string(13) "T_PRIVATE_SET" [135013]=> string(15) "T_PROTECTED_SET" [135014]=> string(12) "T_PUBLIC_SET" [135015]=> string(10) "T_READONLY" }
Output for 7.0.0 - 7.0.33
Fatal error: Uncaught TypeError: Return value of Tokens::polyfillTokenizerConstants() must be an instance of void, none returned in /in/bdlTc:89 Stack trace: #0 /in/bdlTc(3): Tokens::polyfillTokenizerConstants() #1 {main} thrown in /in/bdlTc on line 89
Process exited with code 255.
Output for 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
Parse error: syntax error, unexpected '?' in /in/bdlTc on line 24
Process exited with code 255.
Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29
Parse error: syntax error, unexpected '[' in /in/bdlTc on line 15
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected '[' in /in/bdlTc on line 15
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/bdlTc on line 15
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/bdlTc on line 15
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/bdlTc on line 15
Process exited with code 255.

preferences:
91.8 ms | 436 KiB | 5 Q