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开发中常用的8个小技巧
Aug 27 PHP
php 字符串函数收集
Mar 29 PHP
php学习之流程控制实现代码
Jun 09 PHP
php中stream(流)的用法
Mar 25 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
php如何比较两个浮点数是否相等详解
Feb 12 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
我的论坛源代码(八)
2006/10/09 PHP
PHP图片上传代码
2013/11/04 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
在Python中使用元类的教程
2015/04/28 Python
python集合用法实例分析
2015/05/30 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python斐波那契数列的计算方法
2018/09/27 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
奉献家乡演讲稿
2014/09/13 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
死者家属慰问信
2015/03/24 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
详解Python牛顿插值法
2021/05/11 Python