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 相关文章推荐
我的论坛源代码(一)
Oct 09 PHP
需要发散思维学习PHP
Jun 29 PHP
php错误级别的设置方法
Jun 17 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
PHP输入输出流学习笔记
May 12 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
PHP addcslashes()函数讲解
Feb 03 PHP
PHP与Web页面的交互示例详解一
Aug 04 PHP
php中array_fill函数的实例用法
Mar 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
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
js实现图片360度旋转
2017/01/22 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python队列原理及实现方法示例
2019/11/27 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
python3跳出一个循环的实例操作
2020/08/18 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
亲戚结婚的请假条
2014/02/11 职场文书
父母寄语大全
2014/04/12 职场文书
公司员工安全协议书
2014/11/21 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
监理中标通知书
2015/04/16 职场文书
php 原生分页
2021/04/01 PHP
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript