getFileName(); $start_line = $func->getStartLine(); //作者原来在这里“-1”很灵巧。但为可读性好一点改到下面的"+1"和"-1"了。 $end_line = $func->getEndLine(); $length = $end_line - $start_line + 1; $source = file($filename); $code = implode("", array_slice($source, $start_line - 1, $length));//file转成数组后行数从零开始故减一 echo $code; $code_str = ob_get_clean(); return $code_str; } /** * 格式化数组(格式化成字符串) * @param $arr 要格式化的数组 * @param $dimensional 维度,即当前数组处于被嵌套在第几层中 * @param $pre_sapces_str 上一维度的输出空格字符串 * @param $curr_spaces_str 当前维度的输出空格字符串 * @return string 数组格式化后所得字符串 */ function formatArray($arr,$dimensional,$pre_sapces_str,$curr_spaces_str) { $str = PHP_EOL.$pre_sapces_str.'['.PHP_EOL; $eol_flag = 1; foreach ($arr as $k => $v) { 1 != $eol_flag && $str .= PHP_EOL; $eol_flag = -1; $key = is_string($k) ? "'" . $k . "'" : $k; $value = ''; if (is_object($v)) { $value = formatClosureObject($v); $str .= $value; $eol_flag = 1; continue; } if (is_array($v)) { $value = toPhpCode($v, $dimensional); }else{ $value = formatStringAndOther($v); } $str .= $curr_spaces_str . $key . '=>' . $value . ','; } $str .= PHP_EOL.$pre_sapces_str.']'; return $str; } /** * 转成php代码 * @param $arr 要转的数组 * @param int $dimensional 维度,即当前数组处于被嵌套在第几层中 * @return string 格式化后所得字符串 */ function toPhpCode($arr, $dimensional = 0) { if (!is_array($arr)) { return formatStringAndOther($arr); } $pre_sapces_str = obtainSpaces($dimensional); $dimensional++; $curr_spaces_str = obtainSpaces($dimensional); return formatArray($arr,$dimensional,$pre_sapces_str,$curr_spaces_str); } $str .= toPhpCode($config); $str .= ';'; file_put_contents('../merge_config.php', $str); echo 'generate merge config file success';