静态方法与否?

2024-03-10

我需要使用 PHP 开发一个小型 CMS,现在我正在尝试弄清楚其结构。

CMS 将使用一组函数生成。诸如数据库功能、缓存、国际化之类的东西。

我想这样做:

  • 使函数成为大“站点”类的非静态方法的一部分;这样我就可以运行该类的多个实例。但不确定我是否需要这样做..

  • 或使用静态方法将函数拆分为单独的类

这里的主要问题是 CMS 应该能够管理多个小型站点,而不仅仅是一个。因此,我要么使所有方法静态并添加“站点切换”功能,要么使它们成为我根据要管理的站点实例化的普通对象

其中哪一个是最好的选择?


静态方法通常是不好的做法。他们引入了很多潜在的问题。

1)它们引入了隐藏的依赖关系。任意调用 foo::bar() 的代码依赖于 foo,并且在未定义 foo 的情况下无法运行。使用 foo::bar() 的对象将正确构造,但如果未定义 foo 将无法使用。

2)静态是全局的。全局状态非常糟糕,任何东西都可以改变代码并且其状态是未知的。通过使用静态方法,您牺牲了 OOP 封装所实现的功能和控制。

3)不同版本的功能无法替代

4)它使得单元测试变得不可能。

有关更详细的信息和代码示例,请参阅本文 http://r.je/static-methods-bad-practice.html and 本文 http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/

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

静态方法与否? 的相关文章

随机推荐

  • html 在双语网站中保留语言

    我正在开发一个双语网站 西班牙语 英语 我采纳了第二个答案的建议在这篇文章中 https stackoverflow com questions 32008125 using javascript to change website lan
  • 在 Scala 中 - 将案例类列表转换为元组列表

    我有一堂案例课 case class table a String b Option String 我有一个这种类型的列表 我们称之为 list1 val list1 List table tabele get just filling t
  • Python导入:更改“子”中的变量会更改“父”/其他子中的变量吗?

    假设您有 3 个模块 a py b py 和 c py a py v1 1 v2 2 etc b py from a import c py from a import v1 0 c py会改变a py和b py中的v1吗 如果没有 有办法
  • wget 中的 HTTP 500 错误

    看看这个页面 http www ptmytrade com product asp id 61363 http www ptmytrade com product asp id 61363 它加载良好 至少在这里 现在我想用 wget 来抓
  • 返回数字的最后 5 位

    如何只显示号码的最后5位 输入示例 123456789 将返回 56789 假设需要转换的数字是整数 然后您可以使用模块化数学 您可以将数字转换为以 100 000 为基数的模块 这意味着仅保留最后 5 位数字 转换可以通过除法余数的运算符
  • 如何禁用和启用表 mysql 中的所有约束(包括)。 PK FK CHK UNI 等

    我需要将测试数据加载到表中 我想禁用每个可能的约束 我已经找到了如何全局关闭外键 但我需要禁用所有约束 PK FK CHK UNIQ 等 是否可以在全球范围内进行 当然 在那之后我必须打开所有限制 使用以下命令禁用约束 disable UN
  • 从输出流获取输入流

    我有一个组件在输出流中为我提供数据 ByteArrayOutputStream 并且我需要将其写入 SQL 数据库的 blob 字段而不创建临时缓冲区 因此需要获取输入流 根据答案here https stackoverflow com q
  • 为什么我的 php 代码返回 inf?

    我有一个数学问题 我试图计算一组值的总组合 当我尝试运行我的计算时 它只返回 INF 而不是数字 tally 1 foreach output as key gt er tally tally ord strtolower er 96 ec
  • 按时间间隔访问和设置 iPhone 的闹钟/用户警报

    有什么方法可以访问或设置 iPhone 的闹钟吗 我假设如果这不可用 唯一的其他方法是推送通知以定期提醒用户 有任何想法吗 没有用于访问日历或闹钟的公共 API
  • 退出前是否需要关闭文件描述符?

    当然 大多数情况下的直接答案是 yes 而且我坚信进程应该正确地清理它分配的任何资源 但我的情况是一个长期运行的系统守护进程 它在启动时打开固定数量的文件描述符 并在启动之前关闭它们 退出 这是一个嵌入式平台 我试图使代码尽可能紧凑 同时不
  • 在 VBA 中逐行读取/解析文本文件

    我正在尝试使用 VBA 解析文本文档并返回文本文件中给出的路径 例如 文本文件如下所示 Blah blah instructions Blah blah instructions on line 2 G Folder data xls D
  • Spring - 从查询中获取结果集

    我想用Spring JDBCTemplate但我想收到ResultSet 它不会将完整的查询结果存储在内存中 就像您会发现使用 java 执行标准语句一样JDBC 我发现的最接近的ResultSet was SqlRowSet sqlRow
  • 使用 SimpleDateFormat 时出错

    我正在尝试使用 SimpleDateFormat 类从该字符串中解析 DateTime 2012 年 7 月 5 日 11 38 02 442 世界标准时间 UTC 上午 我尝试了以下格式字符串 SimpleDateFormat datef
  • 数据库设计(库存数据库)

    我正在寻求设计一个跟踪小吃店的库存数据库 由于这将是单人 计算机访问 并且需要轻松移动到另一个系统 因此我计划使用 SQLite 作为数据库引擎 基本概念是跟踪从 Sams Club 等批发仓库购买的库存 然后跟踪库存 我试图克服的主要障碍
  • 在 WooCommerce 3 中获取订单运送商品详细信息

    我怎样才能得到订单运输方式 ID 例如 flate rate 自 WooCommerce 3 以来 一切都发生了变化 现在变得很复杂 我已经尝试过 order gt get data 在 foreach 循环中 但数据受到保护 如果您想获取
  • R 将整个文件夹移动到另一个目录

    我想将整个文件夹从一个目录移动到另一个目录 这是我的代码 folder old path C Users abc Downloads managerA path new C User abc Desktop managerA current
  • 一张数据库表可以包含多个主键吗?

    一张数据库表可以包含多个主键吗 是的 我说的是 RDBMS 一张表可以有 没有主键 一个主键由一列组成 或者 一个复合主键由两列或多列组成 除此之外 您可以拥有任意数量的唯一索引 这基本上可以完成相同的操作
  • 具有混合数据类型的 TensorFlow 数据集生成器

    我正在使用 TensorFlow 数据集 API https www tensorflow org guide datasets https www tensorflow org guide datasets 特别是 我将它与 Tensor
  • 在 Rails 中创建所见即所得表单生成器 (á la Wufoo)

    我必须向 Rails Web 应用程序添加类似 Wufoo 的 WYSIWYG 表单构建器功能 有谁知道有帮助的好资源 宝石 引擎 插件 示例代码 这并不是您问题的真正答案 但不幸的是 由于我的声誉水平 我仍然无法添加评论 抱歉 Drupa
  • 静态方法与否?

    我需要使用 PHP 开发一个小型 CMS 现在我正在尝试弄清楚其结构 CMS 将使用一组函数生成 诸如数据库功能 缓存 国际化之类的东西 我想这样做 使函数成为大 站点 类的非静态方法的一部分 这样我就可以运行该类的多个实例 但不确定我是否