|
579 | 579 |
|
580 | 580 | <!-- markdownlint-disable MD013 --> |
581 | 581 | <h1 id="limitation">Limitation</h1> |
582 | | -<div class="highlight"><pre><span></span><code><span class="x">// @link https://github.com/nikic/PHP-Parser/blob/v4.10.0/lib/PhpParser/Lexer.php#L413-L433</span> |
583 | | - |
584 | | -<span class="x">$compatTokens = [</span> |
585 | | -<span class="x"> // PHP 7.4</span> |
586 | | -<span class="x"> 'T_BAD_CHARACTER',</span> |
587 | | -<span class="x"> 'T_FN',</span> |
588 | | -<span class="x"> 'T_COALESCE_EQUAL',</span> |
589 | | -<span class="x"> // PHP 8.0</span> |
590 | | -<span class="x"> 'T_NAME_QUALIFIED',</span> |
591 | | -<span class="x"> 'T_NAME_FULLY_QUALIFIED',</span> |
592 | | -<span class="x"> 'T_NAME_RELATIVE',</span> |
593 | | -<span class="x"> 'T_MATCH',</span> |
594 | | -<span class="x"> 'T_NULLSAFE_OBJECT_OPERATOR',</span> |
595 | | -<span class="x"> 'T_ATTRIBUTE',</span> |
596 | | -<span class="x">];</span> |
597 | | - |
598 | | -<span class="x">foreach ($compatTokens as $token) {</span> |
599 | | -<span class="x"> if (\defined($token)) {</span> |
600 | | -<span class="x"> $tokenId = \constant($token);</span> |
601 | | -<span class="x"> }</span> |
602 | | -<span class="x">}</span> |
| 582 | +<div class="highlight"><pre><span></span><code><span class="cp"><?php</span> |
| 583 | +<span class="c1">// @link https://github.com/nikic/PHP-Parser/blob/v4.10.0/lib/PhpParser/Lexer.php#L413-L433</span> |
| 584 | + |
| 585 | +<span class="nv">$compatTokens</span> <span class="o">=</span> <span class="p">[</span> |
| 586 | + <span class="c1">// PHP 7.4</span> |
| 587 | + <span class="s1">'T_BAD_CHARACTER'</span><span class="p">,</span> |
| 588 | + <span class="s1">'T_FN'</span><span class="p">,</span> |
| 589 | + <span class="s1">'T_COALESCE_EQUAL'</span><span class="p">,</span> |
| 590 | + <span class="c1">// PHP 8.0</span> |
| 591 | + <span class="s1">'T_NAME_QUALIFIED'</span><span class="p">,</span> |
| 592 | + <span class="s1">'T_NAME_FULLY_QUALIFIED'</span><span class="p">,</span> |
| 593 | + <span class="s1">'T_NAME_RELATIVE'</span><span class="p">,</span> |
| 594 | + <span class="s1">'T_MATCH'</span><span class="p">,</span> |
| 595 | + <span class="s1">'T_NULLSAFE_OBJECT_OPERATOR'</span><span class="p">,</span> |
| 596 | + <span class="s1">'T_ATTRIBUTE'</span><span class="p">,</span> |
| 597 | +<span class="p">];</span> |
| 598 | + |
| 599 | +<span class="k">foreach</span> <span class="p">(</span><span class="nv">$compatTokens</span> <span class="k">as</span> <span class="nv">$token</span><span class="p">)</span> <span class="p">{</span> |
| 600 | + <span class="k">if</span> <span class="p">(</span><span class="nx">\defined</span><span class="p">(</span><span class="nv">$token</span><span class="p">))</span> <span class="p">{</span> |
| 601 | + <span class="nv">$tokenId</span> <span class="o">=</span> <span class="nx">\constant</span><span class="p">(</span><span class="nv">$token</span><span class="p">);</span> |
| 602 | + <span class="p">}</span> |
| 603 | +<span class="p">}</span> |
603 | 604 | </code></pre></div> |
604 | 605 | <p>Here we cannot detect that constants listed in <code>$compatTokens</code> array are perhaps condition code.</p> |
605 | 606 | <p>Later, in another script or even the same one, if we used these constants we will detect them as PHP 7.4 or PHP 8.0 versions, |
606 | 607 | but it's not the reality.</p> |
607 | 608 | <p>Example with</p> |
608 | | -<div class="highlight"><pre><span></span><code><span class="x">// @link https://github.com/nikic/PHP-Parser/blob/v4.10.0/lib/PhpParser/Lexer.php#L110</span> |
609 | | -<span class="x">$tokens[] = [\T_BAD_CHARACTER, $chr, $line];</span> |
| 609 | +<div class="highlight"><pre><span></span><code><span class="cp"><?php</span> |
| 610 | +<span class="c1">// @link https://github.com/nikic/PHP-Parser/blob/v4.10.0/lib/PhpParser/Lexer.php#L110</span> |
| 611 | +<span class="nv">$tokens</span><span class="p">[]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">\T_BAD_CHARACTER</span><span class="p">,</span> <span class="nv">$chr</span><span class="p">,</span> <span class="nv">$line</span><span class="p">];</span> |
610 | 612 | </code></pre></div> |
611 | 613 | <p>Console output tell us</p> |
612 | 614 | <div class="highlight"><pre><span></span><code>Constants Analysis |
|
0 commit comments