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+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
深入php之规范编程命名小结
May 15 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
Sep 01 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
phpStorm2020 注册码
Sep 17 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
javascript some()函数用法详解
2014/11/13 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
Python找出9个连续的空闲端口
2016/02/01 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
房地产项目策划书
2014/02/05 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
搞笑创意广告语
2014/03/17 职场文书
另类冲刺标语
2014/06/24 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
python本地文件服务器实例教程
2021/05/02 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电