Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于后缀删除整个PHP函数_Php_Parsing - Fatal编程技术网

基于后缀删除整个PHP函数

基于后缀删除整个PHP函数,php,parsing,Php,Parsing,我想从我的代码中删除所有以结尾的函数。我正在使用token\u get\u all处理代码。下面是我目前拥有的代码,用于更改开头标记并删除注释 foreach ($files as $file) { $content = file_get_contents($file); $tokens = token_get_all($content); $output = ''; foreach($tokens as $token) { if (is_arr

我想从我的代码中删除所有以
结尾的函数。我正在使用
token\u get\u all
处理代码。下面是我目前拥有的代码,用于更改开头标记并删除注释

foreach ($files as $file) {
    $content = file_get_contents($file);
    $tokens = token_get_all($content);
    $output = '';

    foreach($tokens as $token) {
        if (is_array($token)) {
            list($index, $code, $line) = $token;

            switch($index) {
                case T_OPEN_TAG_WITH_ECHO:
                    $output .= '<?php echo';
                    break;
                case T_COMMENT:
                case T_DOC_COMMENT:
                    $output .= '';
                    break;
                case T_FUNCTION:
                    // ???
                default:
                    $output .= $code;
                break;
            }
        } else {
            $output .= $token;
        }
    }

    file_put_contents($file, $output);
}
foreach($files as$file){
$content=file\u get\u contents($file);
$tokens=token\u get\u all($content);
$output='';
foreach($tokens作为$token){
if(是_数组($token)){
列表($index,$code,$line)=$token;
交换机($索引){
案例T_打开_标签_,带有回音:

$output.='好的,我为您的问题编写了新代码:

首先,他在源代码中找到每个函数及其声明。 其次,他检查函数名是否由“\u example”完成,并删除他的代码

$source = file_get_contents($filename); // Obtain source from filename $filename
$tokens = token_get_all($source); // Get php tokens

// Init variables
$in_fnc    = false;
$fnc_name  = null;
$functions = array();

// Loop $tokens to locate functions
foreach ($tokens as $token){
    $t_array = is_array($token);
    if ($t_array){
        list($t, $c) = $token;
        if (!$in_fnc && $t == T_FUNCTION){ // "function": we register one function start
            $in_fnc   = true;
            $fnc_name = null;
            $nb_opened = $nb_closed = 0;
            continue;
        }
        else if ($in_fnc && null === $fnc_name && $t == T_STRING){ // we check and store the name of function if exists
            if (preg_match('`function\s+'.preg_quote($c).'\s*\(`sU', $source)){ // "function function_name ("
                $fnc_name = $c;
                continue;
            }
        }
    }
    else {
        $c = $token; // single char: content is $token
    }

    if ($in_fnc && null !== $fnc_name){ // we are in declaration of function
        $nb_closed += substr_count($c, '}'); // we count number of } to extract later complete code of this function
        if (!$t_array){
            $nb_opened += substr_count($c, '{') - substr_count($c, '}'); // we count number of { not closed (num "{" - num "}")
            if ($nb_closed > 0 && $nb_opened == 0){ // once "}" parsed and all "{" are closed by "}"
                if (preg_match('`function\s+'.preg_quote($fnc_name).'\s*\((.*\}){'.$nb_closed.'}`sU', $source, $m)){
                    $functions[$fnc_name] = $m[0]; // we store entire code of this function in $functions
                }
                $in_fnc = false; // we declare that function is finished
            }
        }
    }
}

// Ok, now $functions contains all functions found in $filename

$source_changed = false; // Prevents re-write $filename with the original content 
foreach ($functions as $f_name => $f_code){
    if (preg_match('`_example$`', $f_name)){
        $source = str_replace($f_code, '', $source); // remove function if her name finished by "_example"
        $source_changed = true;
    }
}
if ($source_changed){
    file_put_contents($filename, $source); // replace $filename file contents
}