我有这个功能负责将文件的名称和MIME类型转换为更多的“人”(例如file.png,image / png到[Image,PNG])。我发现有趣的是,if()elseif()语句的组具有比switch(true)语句更高的NPath复杂度。

使用以下代码,PHP Mess Detector输出一个4410的NPath:

public function humanKind()

{

$typeRA = explode("/", strtolower($this->type));

$fileRA = explode(".", $this->name);

$fileType = strtoupper($fileRA[count($fileRA) - 1]);

switch($typeRA[0]) {

case "image":

$humanType = "Image";

break;

case "video":

$humanType = "Video";

break;

case "audio":

$humanType = "Sound";

break;

case "font":

$humanType = "Font";

break;

default:

$humanType = "File";

}

switch ($this->type) {

case "application/msword":

case "application/pdf":

case "applicaiton/wordperfect":

case "text/plain":

case "text/rtf":

case "image/vnd.photoshop":

case "image/psd":

case "image/vnd.adobe.photoshop":

case "image/x-photoshop":

case "application/xml":

case "application/x-mspublisher":

case "text/html":

case "application/xhtml+xml":

case "text/richtext":

case "application/rtf":

case "application/x-iwork-pages-sffpages":

case "application/vnd.apple.pages":

$humanType = "Document";

break;

case "application/vnd.ms-excel":

case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":

case "application/x-iwork-numbers-sffnumbers":

case "application/vnd.apple.numbers":

$humanType = "Spreadsheet";

break;

case "application/vnd.ms-powerpoint":

case "application/vnd.openxmlformats-officedocument.presentationml.presentation":

case "application/vnd.openxmlformats-officedocument.presentationml.slideshow":

case "application/x-iwork-keynote-sffkey":

case "application/vnd.apple.keynote":

$humanType = "Slideshow";

break;

case "application/zip":

case "application/x-zip-compressed":

case "application/x-compressed":

case "application/x-compress":

case "application/x-rar-compressed":

case "applicaiton/x-7z-compressed":

case "application/x-ace-compressed":

$humanType = "Archive";

break;

case "text/x-vcard":

case "text/x-ms-contact":

$humanType = "Contact";

break;

case "text/x-php":

case "application/x-dosexec":

case "application/x-xpinstall":

case "application/x-opera-extension":

case "application/x-chrome-extension":

case "application/x-perl":

case "application/x-shockwave-flash":

case "application/java-archive":

$humanType = "Program";

break;

case "application/vnd.ms-fontobject":

case "application/font-woff":

case "application/x-font-truetype":

case "application/x-font-opentype":

case "application/x-font-ttf":

case "application/font-sfnt":

$humanType = "Font";

break;

}

// Special Cases

if ($humanType == "Archive" && $fileType == "APK") { // Android App

$humanType = "App";

} elseif ($humanType == "Archive" && $fileType == "XPS") {

$humanType = "Document";

} elseif ($this->type == "application/xml" && $fileType == "CONTACT") {

$humanType = "Contact";

} elseif ($this->type == "application/octet-stream" && $fileType == "JNT") {

$humanType = "Document";

}

if (strlen($fileType) > 4) {

$fileType = "";

}

return array($humanType, $fileType);

如果我们然后替换特殊情况,如果elseif与以下:

// Special Cases

switch(true) {

case ($humanType == "Archive" && $fileType == "APK"): // Android App

$humanType = "App";

break;

case ($humanType == "Archive" && $fileType == "XPS"):

$humanType = "Document";

break;

case ($this->type == "application/xml" && $fileType == "CONTACT"):

$humanType = "Contact";

break;

case ($this->type == "application/octet-stream" && $fileType == "JNT"):

$humanType = "Document";

break;

}

PHP Mess Detector报告了1960年的NPath复杂性。

为什么是这样?什么使switch(true)比我所看到的仅仅是一个相同的控制结构那么复杂?

php truepath,php – 为什么switch(true)具有比if()elseif()更小的NPath复杂度?相关推荐

  1. while (true) 和 for (;;) 到底哪个更快?

    作者 | RednaxelaFX 来源 | https://zhihu.com/question/52311366/answer/130090347 在JDK8u的jdk项目下做个很粗略的搜索: my ...

  2. getdevicecaps在哪个头文件里_一招定胜负,while (true) 和 for (;;) 到底哪个更快

    在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for (s?;s?;" . ...

  3. vue hot true 不起作用_Vue + Flask 小知识(二)

    微信公众号:萝卜大杂烩 关注可了解更多的原创内容.问题或建议,请公众号留言或加本人微信;如果你觉得文章对你有帮助,欢迎加微信交流 今天继续分享 Vue.js 学习笔记,结合 handsontable. ...

  4. python 下列表达式的值为true的是_下列表达式的值为True的是( )。_学小易找答案...

    [简答题] [多选题]Benson将失读症分为( ) [填空题]下列 Python 语句的输出结果是 . print(" 数量 {0}, 单价 {1} ".format(100,2 ...

  5. ps4计算机,一台电脑价格等于Switch+PS4 PC和主机谁更省钱

    不少主机玩家认为,PC玩家需要花费更多的钱来组装一台电脑,才能体验到主机游戏的乐趣.然而,他们忽视了游戏打折这一环节. 让我们先来看看主机的价格:一台PS4 Slim大约230英镑,一台PS4 Pro ...

  6. 去除字符串中重复字符

    题目http://www.cricode.com/260.html 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间.注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝 ...

  7. Placement Rules 使用文档

    注意 本文介绍如何手动在 Placement Driver (PD) 中设置 Placement Rules.推荐使用 Placement Rules in SQL,让你更方便地设置表和分区的放置. ...

  8. 二叉搜索树BST的学习

    文章目录 二叉搜索树BST 什么是BST? 用BST做什么? 一.BST的特性 BST的特性是什么? 1.[230. 二叉搜索树中第K小的元素](https://leetcode.cn/problem ...

  9. APP优化篇——优化关键评估指标

    目前,随着APP行业的竞争越来越激烈,功能也越发丰富,人们评价一款产品的优秀程度,已经不能单纯通过 "是否具备某些功能" 来评价某个产品了,纯技术壁垒的产品已经是凤毛麟角,从用户角 ...

最新文章

  1. opengl加载显示3D模型Q3O类型文件
  2. 算法设计与分析:芯片测试问题、选择问题详解
  3. python调用arcgis_arcgis python 调用工具两种两种方法
  4. Java基础语法实例(2)——实习第二天
  5. Java实例分析:宠物商店
  6. 闭包、作用域链、函数
  7. php 修改 wordpress,wordpress如何修改php.ini
  8. 2022年电子商务概论(农)之形考作业二
  9. Axure实战002:APP原型设计思路
  10. PKPM学习:关于“悬空柱”的问题
  11. OOP,Object Oriented Programming 面向对象的三大特性 五大基本原则
  12. 论文解读:Combining Distant and Direct Supervision for Neural Relation Extraction
  13. 系统服务器算固定资产吗,服务器操作系统算固定资产
  14. 我最欣赏的一句话:天道酬勤
  15. mantis 重启mysql_Mantis -- linux
  16. Linux 服务器 OOM 分析
  17. 18款最值得推荐的免费视频编辑软件
  18. 基于Matlab的QPSK系统设计(多径瑞利信道,采用jakes模型以及指数模型)
  19. 键盘突然失灵-解决方法:卸载->重启
  20. 海外服务器被攻击怎么办?IP被封要如何处理?

热门文章

  1. python100个必背知识-学Python必背的初级单词,你都背了吗?
  2. 学python可以做什么职业好-学了那么多年python到底可以找什么工作?
  3. python 程序流程控制结构-python之流程控制语句
  4. python电脑版微信-python如何实现远程控制电脑(结合微信)
  5. python解释器是什么-python解释器都有什么
  6. 如何自学python爬虫-菜鸡的Python爬虫之路(一)如何零基础自学Python
  7. python编程100例头条-今日头条python面试题之编程篇
  8. python培训出来的有公司要吗-Python培训班出来好找工作吗?
  9. python爬虫项目-32个Python爬虫项目让你一次吃到撑
  10. python基础教程第二版下载-Python基础教程(第2版)