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编程网上资源导航
Oct 09 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
解析php5配置使用pdo
Jul 03 PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
php显示页码分页类的封装
Jun 08 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
PDO实现学生管理系统
Mar 21 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中bind_param()函数用法分析
2017/03/28 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
Three.js基础部分学习
2017/01/08 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
应聘自荐信
2013/12/14 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
酒后驾车标语
2014/06/30 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
2014年计生工作总结
2014/11/21 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫