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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
Dec 16 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
C#静态方法与非静态方法实例分析
Sep 22 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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 超链接 抓取实现代码
2009/06/29 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python深入学习之装饰器
2014/08/31 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python实现聊天小程序
2018/03/13 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
Python函数调用追踪实现代码
2020/11/27 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
资源环境与城市管理专业推荐信
2013/11/30 职场文书
新闻专业个人求职信
2013/12/19 职场文书
销售经理工作职责
2014/02/03 职场文书
校庆接待方案
2014/03/18 职场文书
怎样填写就业意向
2014/04/02 职场文书
委托书样本
2014/04/02 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
校园新闻稿范文
2015/07/18 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL