PHP实现统计代码行数小工具


Posted in PHP onSeptember 19, 2019

本文实例为大家分享了PHP实现统计代码行数小工具,供大家参考,具体内容如下

为了方面统计编程代码行数,做了一个小工具。

自动统计指定目录以及目录下的所有文件。

<?php
 
class TotalCode {
 
 /**
 * 统计当前文件有多少行代码,
 * @return TotalCodeInfo
 */
 public function totalByFile($fullFileName) {
 $fileContent = file_get_contents($fullFileName);
 $lines = explode("\n", $fileContent);
 $lineCount = count($lines);
 
 for($i = $lineCount -1; $i > 0; $i -= 1) {
  $line = $lines[$i];
  if ($line != "") break;
  $lineCount -= 1; //最后几行是空行的要去掉。
 }
 unset($fileContent);
 unset($lines);
 
 $totalCodeInfo = new TotalCodeInfo();
 $totalCodeInfo->setFileCount(1);
 $totalCodeInfo->setLineCount($lineCount);
 return $totalCodeInfo;
 }
 
 /**
 * 统计当前目录下(含子目录)
 * 有多少文件,以及多少行代码
 * 
 * totalInfo = array( "fileCount"=>?, "lineCount"=>? );
 * 
 * @return TotalCodeInfo 
 */
 public function totalByDir($dirName) {
 $fileList = scandir($dirName);
 $totalCodeDir = new TotalCodeInfo();
 foreach ($fileList as $fileName) {
  if ($fileName == "." || $fileName == "..") continue;
  $fullFileName = $dirName . "/" . $fileName;
  if (is_file($fullFileName)) {
  $totalCodeSub = $this->totalByFile($dirName . "/" . $fileName);
  } else if (is_dir($fullFileName)) {
  $totalCodeSub = $this->totalByDir($dirName . "/" . $fileName); 
  } else {
  $totalCodeSub = new TotalCodeInfo();
  }
  
  $totalCodeDir->increaseByOther($totalCodeSub);
 }
 return $totalCodeDir;
 }
 
 public function totalByDirOrFile($dirOrFileName) {
 if (is_dir($dirOrFileName)) {
  return $this->totalByDir($dirOrFileName);
 } else if (is_file($dirOrFileName)) {
  return $this->totalByFile($dirOrFileName);
 } else {
  return new TotalCodeInfo();
 }
 }
 
 public function test() {
 $re = $this->totalByDir("/export/www/pm_web/configs");
 var_dump($re);
 }
 
 public function main($dirList) {
 $totalCodeAll = new TotalCodeInfo();
 foreach($dirList as $dirName) {
  $totalCodeSub = $this->totalByDirOrFile($dirName);
  $totalCodeAll->increaseByOther($totalCodeSub);
 }
 print_r($totalCodeAll);
 }
 
}
 
class TotalCodeInfo {
 private $fileCount = 0;
 private $lineCount = 0;
 
 public function getFileCount() { return $this->fileCount; }
 public function getLineCount() { return $this->lineCount; }
 public function setFileCount($fileCount) {
 $this->fileCount = $fileCount;
 return $this;
 }
 public function setLineCount($lineCount) {
 $this->lineCount = $lineCount;
 return $this;
 }
 
 /**
 * 累加 
 */
 public function increaseByOther($totalCodeInfo) {
 $this->setFileCount( $this->fileCount + $totalCodeInfo->getFileCount());
 $this->setLineCount( $this->lineCount + $totalCodeInfo->getLineCount());
 return $this;
 }
}
 
$dirList = array();
$dirList[] = "/your/path";
 
$obj = new TotalCode();
$obj->main($dirList);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php的正则处理函数总结分析
Jun 20 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
Jan 07 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
Sep 29 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 #PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 #PHP
php使用yield对性能提升的测试实例分析
Sep 19 #PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 #PHP
php+redis实现消息队列功能示例
Sep 19 #PHP
php文件包含的几种方式总结
Sep 19 #PHP
smarty模板的使用方法实例分析
Sep 18 #PHP
You might like
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP图片水印类的封装
2017/07/06 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
浅谈Vue.js
2017/03/02 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
用Python实现协同过滤的教程
2015/04/08 Python
Python argv用法详解
2016/01/08 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
浅析Python 责任链设计模式
2020/09/11 Python
python matplotlib库的基本使用
2020/09/23 Python
python pymysql库的常用操作
2020/10/16 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
出国留学计划书
2014/04/27 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL