Search code examples
phpreserved-words

How can I check whether a word is reserved by PHP?


Is there some function for checking whether a word is reserved in PHP or I can use it myself? I can check it manually: just use it and see the error or warning, but I need to automate this check. Is there any way to do this?


Solution

  • Array borrowed from http://www.php.net/manual/en/reserved.keywords.php

    You could easily modify it to work for the predefined constants array.

    This works.

    <?php
    $keywords = array('__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor');
    
    $predefined_constants = array('__CLASS__', '__DIR__', '__FILE__', '__FUNCTION__', '__LINE__', '__METHOD__', '__NAMESPACE__', '__TRAIT__');
    
    $checkWord='break'; // <- the word to check for.
    if (in_array($checkWord, $keywords)) {
        echo "Found.";
    }
    
    else {
    echo "Not found.";
    }
    
    ?>
    

    You could also implement this in conjunction with a form by replacing:

    $checkWord='break';
    

    with

    $checkWord=$_POST['checkWord'];
    

    I.e.:

    <?php
    
    if(isset($_POST['submit'])){
    $keywords = array('__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor');
    
    $predefined_constants = array('__CLASS__', '__DIR__', '__FILE__', '__FUNCTION__', '__LINE__', '__METHOD__', '__NAMESPACE__', '__TRAIT__');
    $checkWord=$_POST['checkWord'];
    
    if (in_array($checkWord, $keywords)) {
        echo "FOUND!!";
    }
    
    else {
    echo "Not found.";
       }
    
    }
    
    ?>
    
    <form method="post" action="">
    
    Enter word to check: 
    <input type="text" name="checkWord">
    
    <br>
    <input type="submit" name="submit" value="Check for reserved word">
    </form>
    

    A different version using both arrays set inside a form.

    It could stand for some polishing up, but it does the trick

    <?php
    
    if(isset($_POST['submit'])){
    $keywords = array('__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor');
    
    $predefined_constants = array('__CLASS__', '__DIR__', '__FILE__', '__FUNCTION__', '__LINE__', '__METHOD__', '__NAMESPACE__', '__TRAIT__');
    
    $checkWord=$_POST['checkWord'];
    
    $checkconstant=$_POST['checkconstant'];
    
    if (in_array($checkWord, $keywords)) {
        echo "<b>Reserved word FOUND!!</b>";
        echo "\n";
    }
    
    else {
    echo "Reserved word not found or none entered.";
       }
    
    if (in_array($checkconstant, $predefined_constants)) {
        echo "<b>Constant word FOUND!!</b>";
        echo "\n";
    }
    
    else {
    echo "Constant not found or none entered.";
       }
    
    }
    
    ?>
    
    <form method="post" action="">
    
    Enter reserved word to check: 
    <input type="text" name="checkWord">
    
    Enter constant word to check: 
    <input type="text" name="checkconstant">
    
    <br><br>
    <input type="submit" name="submit" value="Check for reserved words">
    <input type="reset" value="Reset" name="reset">
    </form>