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 str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
php将时间差转换为字符串提示
Sep 07 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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的面试题集,附我的答案和分析(一)
2006/11/19 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
php输入流php://input使用浅析
2014/09/02 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python实现翻转数组功能示例
2018/01/12 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
在Python中表示一个对象的方法
2019/06/25 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
构建高效的python requests长连接池详解
2020/05/02 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
老师的检讨书
2014/02/23 职场文书
机关搬迁方案
2014/05/18 职场文书
煤矿安全承诺书
2014/05/22 职场文书
人力资源部工作计划
2019/05/14 职场文书
宪法宣传标语100条
2019/10/15 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
vue实现Toast组件轻提示
2022/04/10 Vue.js