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中的cookie
Nov 26 PHP
PHP与SQL注入攻击[二]
Apr 17 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
Oct 24 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
PHP isset empty函数相关面试题及解析
Dec 11 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版(2)
2006/10/09 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
PHP中使用curl入门教程
2015/07/02 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
原生JS实现的双色球功能示例
2018/02/02 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
python实现图片批量剪切示例
2014/03/25 Python
python集合类型用法分析
2015/04/08 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
对python的输出和输出格式详解
2018/12/08 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
cf战队收人广告词
2014/03/14 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
出生公证书
2015/01/23 职场文书
护士2015年终工作总结
2015/04/29 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang