我有一个包含 14 个静态方法和 4 个静态属性的类 - 这很糟糕吗?

2024-01-08

我一直在编写一个 PHP 类,该类正好有 450 行长,它包含 14 个静态方法和 4 个静态属性以及 6 个常量(以及私有__construct() and __clone()).

我想知道我是不是做错了什么,我的班级是邪恶的吗?

当您使用该类时,您总是调用一个方法,例如:

MyClass::coolMethod();

然后你完全不理会它,所以感觉让它可构建是愚蠢的?

用它构造对象实际上没有多大意义,因为它更像是一个包含一些可以直接调用的方法的工具。

实际上,在这 14 个方法中,有 7 个是公共的,其余的则是私有的,供类使用。


你应该避免static尽可能global.

静态给你带来了与全局给你同样的缺点。每当您使用任何类方法时,您都会将该类的依赖项硬编码到使用代码中。结果是紧密耦合代码的可维护性较差。这可以很容易地避免完全避免静态 http://www.phparch.com/2010/03/03/static-methods-vs-singletons-choose-neither/以及依赖注入的严格使用。

您不能注入和传递静态类,例如当你必须对它们进行单元测试时,你不能嘲笑它们 http://giorgiosironi.blogspot.com/2009/11/mocking-static-methods-road-to-hell.html (或者至少需要付出一些努力 http://sebastian-bergmann.de/archives/883-Stubbing-and-Mocking-Static-Methods.html)。这只是简单的痛苦。静态方法对可测试性来说是致命的。 http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/

另外,请记住,类应该只做一件事。他们应该有单一的责任 https://secure.wikimedia.org/wikipedia/en/wiki/Single_responsibility_principle。检查一下你的班级,看看里面是否有一些东西最好放在其他地方,以避免写一个神级. https://secure.wikimedia.org/wikipedia/en/wiki/God_class

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我有一个包含 14 个静态方法和 4 个静态属性的类 - 这很糟糕吗? 的相关文章

  • file_get_contents,HTTP 请求失败

    我尝试使用以下方式从另一个网站获取内容file get contents但我总是收到 无法打开流 HTTP 请求失败 allow url fopen 已打开 并且我已经在防火墙关闭的情况下进行了测试 但还是会出现这种情况 请问还有什么原因呢
  • “警告:mysql_query():提供的参数不是有效的 MySQL-Link” - 为什么?

    我的代码有什么问题吗 我不断收到此错误 Warning mysql query supplied argument is not a valid MySQL Link resource in functions php on line 4
  • Laravel 5 配置语言环境,不起作用

    已完成的修改 on 配置 应用程序 php locale gt env APP LOCALE en fallback locale gt en on env APP LOCALE pt 我也复制了 资源 lang en文件到 资源 lang
  • 使用 CodeIgniter 加载视图文件夹外的视图

    我需要从以下范围之外加载视图 this gt load gt view 这似乎是从base application views目录 如何从外部访问视图 application 目录 我想我将不得不延长CI Loader class这是最好的
  • WooCommerce 自定义字段 - 多选

    我在 WooCommerce 的结账页面添加额外的字段 我可以添加文本框等基本字段 但需要添加一个 多 选择框 用户可以在其中选择多个项目 我已经弄清楚如何通过代码添加选择框 如下所示 add action woocommerce afte
  • 提交简单 PHP 表单时出现禁止错误

    我有一个不复杂的问题 这似乎比应有的更复杂 我有一个简单的表单 用于向网站添加内容 有些字段需要输入html 然而 当您在表单的不同部分输入某些 html 元素时 它会认为它讨厌您并抛出禁止的 403 错误 这是下面的表格
  • 在 Objective-C 中获取对象的属性数组

    Objective C 中是否可以获取对象所有属性的数组 基本上 我想做的是这样的 void save NSArray propertyArray self propertyNames for NSString propertyName i
  • 如何接收发送到 twilio 号码的短信

    我在 twilio 创建了一个免费帐户 用于通过我的网站发送短信 注册后 我得到了一个 twilio 号码 例如 XXX XXX XXXX 我可以向手机号码发送消息 但我不知道如何使用这个 twilio 号码接收短信 请帮我解决这个问题 T
  • phpenmod 显示其他 php 版本的路径

    我的 Ubuntu 机器上安装了 php 7 0 和 7 2 当我执行时php v 它告诉我我正在使用 php 7 2 在 Apache 上我还启用了 php 7 2 当我跑步时phpenmode zip 我明白了 WARNING Modu
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • 很简单的PHP加法问题

    我想我已经关注这个问题太久了 为什么这段代码打印 no 它应该打印 yes 不是吗 我在 PHP 5 3 和 PHP 5 2 上尝试过 都打印 no See 比较浮点数 http www cygnus software com papers
  • 我应该在 Symfony 中哪里放置既不是控制器也不是模型的类?

    对于我的应用程序包 我需要一些既不是控制器也不是模型的类 例如 我想要一个scorecard具有诸如 技能 效率 美丽 等成员的类 此外 它可能具有诸如 meanScore 之类的成员方法 getters 这样的类在 Symfony 框架中
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • PHP 搜索部分字符串

    如何在键入时搜索部分字符串 不使用 MySQL 例如 MySQL 中的 LIKE 函数 但在搜索字符串时使用 PHP 例如 但这显然行不通 但是有没有一个函数可以搜索部分字符串 那太好了 EDIT 如果它在数组中怎么办 如果我使用 strp
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th
  • SimpleXML 返回空数组

    我正在尝试使用 Google Maps API 和 PHP SimpleXML 获取城市的纬度和经度 我尝试这样做 xml simplexml load file http maps googleapis com maps api geoc
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐

  • 仅在 Python 中将 datetime 对象转换为日期字符串

    我看到很多关于将日期字符串转换为datetimePython 中的对象 但我想走另一条路 我有 datetime datetime 2012 2 23 0 0 我想将它转换为字符串 2 23 2012 您可以使用strftime http
  • Xamarin iOS 防止特定视图控制器旋转

    需要防止特定视图控制器上的屏幕旋转我在下面尝试过 public override bool ShouldAutorotateToInterfaceOrientation UIInterfaceOrientation toInterfaceO
  • Select2:动态隐藏某些选项

    基本上我正在寻找的是能够从所选项目的下拉列表中隐藏选项的能力 因此 从技术上讲 它们仍然是选项 但您只是无法单击它们 因为它们是隐藏的 我浏览了文档并发现了与禁用相关的内容 不幸的是我非常特别想要隐藏项目的能力 有人对如何实现这一目标有建议
  • 继承构造函数

    为什么这段代码 class A public explicit A int x class B public A int main void B b new B 5 delete b 导致这些错误 main cpp In function
  • Java 制作一个单独的注释,结合其他注释

    使用 Play Framework 2 2 制作 RESTful API 在我正在使用的模型中 我只想输出 Json with Jackson 相关对象的 Id 而不是整个对象 我找到了如何做到这一点 如下所示 JsonIdentityIn
  • 使用 FileProvider 在 Android N 上打开下载的文件

    由于 FileProvider 的更改 我必须修复适用于 Android N 的应用程序 我基本上已经阅读了关于这个主题的所有内容 但没有找到适合我的解决方案 这是我们之前的代码 它开始从我们的应用程序下载 并将它们存储在Download文
  • Dart/Flutter 中什么时候应该使用分号?

    我是 Dart Flutter 的初学者并尝试阅读this https dart dev guides language language tour但我仍然不明白什么时候使用分号 为什么我们不在小部件的每个括号末尾插入分号 Dart中有两种
  • 我可以查出坐标是否在城市内吗?

    假设我有一个 LatLng 对象 有什么方法可以检查它是否代表城市内的可能位置 如何获得城市的边界 我正在使用谷歌地图V3 您尝试过反向地理编码吗 http code google com apis maps documentation j
  • 程序收到信号:“EXC_BAD_ACCESS”

    我有一个字符串变量 它存储日期选择器中的日期 但是当我在其他函数中使用它的值时 我收到类似程序收到信号的错误 EXC BAD ACCESS 注意 变量是全局定义的 code void changedDate UIDatePicker pic
  • 从相机预览中的触摸事件中检索准确的 RGB 值

    我一直在开发一个 Android 应用程序 它只需要检索并在相机预览上显示触摸事件的坐标和 RGB 值 我是这种编程语言的初学者 我只是想尝试一下 但应用程序在触摸事件期间不断崩溃 这是我在 Android 中尝试过的代码 When cop
  • 在 PyQt 中显示其他语言字符

    PyQt4 有没有办法显示其他语言字符 如果有 我应该采取什么方法 方向 提前致谢 Qt 使用 Unicode 并且应该能够以您拥有合适字体的任何语言显示 Unicode 文本 例如 Roberto Alesina 的简单 Hello Wo
  • 新的“dynamic”C# 4.0 关键字是否弃用了“var”关键字?

    当 C 4 0 出现时 我们有了如此处描述的动态关键字excellent presentation by Anders Hejlsberg http channel9 msdn com pdc2008 TL16 C 的发展速度比我能跟上的要
  • OSGi - 这项技术有多成熟?

    我有一个要求 我需要共享一些网络资源 jsp html js images css等 跨越不同Spring based Struts 2应用程序 似乎OSGi可以用来实现这个吗 有人可以指点一下如何实现这一目标吗OSGi 其次我想知道的是O
  • Java 线程/易失性

    我有一个线程 class Foo extends Thread boolean active true public void run while active do stuff public void end active false p
  • 'in' 表示两个复杂度最低的排序列表

    我有两个sorted列表 例如 a 1 4 7 8 b 1 2 3 4 5 6 我想知道其中的每一项a如果它在b 对于上面的例子 我想找到 a in b True True False False 或具有索引 其中a in b is Tru
  • php检查数组值是否重复[重复]

    这个问题在这里已经有答案了 我有以下数组 PHP arr array A A B C 我想检查值 如果值重复则必须发出警报错误 PHP chk array count values array if chk 0 lt 1 chk 2 lt
  • Visual Studio 2015突然不想在类中创建新变量[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我几乎一整天都在为这个问题苦苦挣扎 我在互联网上找不到任何答案 我知道这个修复只是为了改变一件小事 但我不知道是哪一件 卸载 使用
  • SQL LIKE % 未搜索

    我想使用 SQL LIKE 函数执行简单的搜索 不幸的是 由于某种原因 它似乎不起作用 下面是我的代码 private void gvbind connection Open string sql if txtSearch Text Tri
  • 将小数转换为另一种基数的时间复杂度

    这是计算十进制数的基本版本的代码 我不确定它的时间复杂度 谢谢 public static String convertToBase int num int base if base gt 36 throw new IllegalArgum
  • 我有一个包含 14 个静态方法和 4 个静态属性的类 - 这很糟糕吗?

    我一直在编写一个 PHP 类 该类正好有 450 行长 它包含 14 个静态方法和 4 个静态属性以及 6 个常量 以及私有 construct and clone 我想知道我是不是做错了什么 我的班级是邪恶的吗 当您使用该类时 您总是调用