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与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
一步一步学习PHP(5) 类和对象
Feb 16 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
原生js实现验证码功能
2017/03/16 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
Python线性回归实战分析
2018/02/01 Python
python中的decorator的作用详解
2018/07/26 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
explicit和implicit的含义
2012/11/15 面试题
高级销售求职信
2014/02/21 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
小学生运动会广播
2015/08/19 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js