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 相关文章推荐
FCKeditor添加自定义按钮
Mar 27 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
Views rows style模板重写代码
May 16 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
Jun 28 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
PHP类型约束用法示例
Sep 28 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 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
提问的智慧(2)
2006/10/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
php图片裁剪函数
2018/10/31 PHP
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
房屋租赁协议书
2014/04/10 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
销售人才自我评价范文
2014/09/27 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫