去除PHP代碼中的空白和注釋

字號:


    PHP內(nèi)置了一個php_strip_whitespace方法用于讀取php文件并去除代碼中的空白和注釋,但不支持直接讀取內(nèi)容去除空白和注釋,下面的方法則可以支持讀取字符串內(nèi)容,并且ThinkPHP框架內(nèi)置了該方法。
    /**
    * 去除代碼中的空白和注釋
    * @param string $content 代碼內(nèi)容
    * @return string
    */
    function strip_whitespace($content) {
    $stripStr = '';
    //分析php源碼
    $tokens = token_get_all($content);
    $last_space = false;
    for ($i = 0, $j = count($tokens); $i < $j; $i++) {
    if (is_string($tokens[$i])) {
    $last_space = false;
    $stripStr .= $tokens[$i];
    } else {
    switch ($tokens[$i][0]) {
    //過濾各種PHP注釋
    case T_COMMENT:
    case T_DOC_COMMENT:
    break;
    //過濾空格
    case T_WHITESPACE:
    if (!$last_space) {
    $stripStr .= ' ';
    $last_space = true;
    }
    break;
    case T_START_HEREDOC:
    $stripStr .= "<<
    break;
    case T_END_HEREDOC:
    $stripStr .= "THINK;n";
    for($k = $i+1; $k < $j; $k++) {
    if(is_string($tokens[$k]) && $tokens[$k] == ';') {
    $i = $k;
    break;
    } else if($tokens[$k][0] == T_CLOSE_TAG) {
    break;
    }
    }
    break;
    default:
    $last_space = false;
    $stripStr .= $tokens[$i][1];
    }
    }
    }
    return $stripStr;
    }