最好使用私有方法还是受保护方法?

2024-01-10

在我的许多 PHP 项目中,我最终得到的类具有我不打算扩展的非公共函数。

最好将它们声明为受保护的还是私有的?

我可以从两种角度看待争论——将它们设为私有是一种更为保守的方法,但可以说,如果我希望扩展该方法,并且它清楚地表明哪些方法是由基类扩展的,那么可以稍后对它们进行保护。

另一方面,使用 private 是否在某种程度上是反社会的,因为它会阻碍理论上的未来开发人员在不进行修改的情况下扩展我的代码?


我的本能是让它们保密,直到你需要它们为止。

有人认为(遗憾的是我放错了链接)将方法设为私有是反社会的,与将它们设为“最终”的方式大致相同,因为它对人们如何使用您的代码相当独裁。

然而,我并不相信,并且同意您应该只公开您真正需要的内容。例外情况是库或工具包,您希望用户希望以您永远无法预见的方式扩展(一般意义上的)您的代码。在这种情况下,对精心选择的方法进行保护可以被视为提供弹性点。

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

最好使用私有方法还是受保护方法? 的相关文章

随机推荐

  • 如何防止在更改源列表时调用 ComboBox Change 事件

    TL DR 如何防止在源列表中添加或删除项目时触发 ActiveX ComboBox 请注意我见过这个帖子 https stackoverflow com questions 19276861 how to prevent activex
  • 按钮周围的虚线边框

    我试图在按钮周围绘制虚线边框 但是边框没有出现 不确定我在这里做错了什么 你能帮忙吗 我的 Xaml 代码
  • 在大型 MySQL 表中添加新列

    在大型 MySQL 表中添加新列的最快方法是什么 ALTER TABLE ADD COLUMN创建完整表的副本 然后用新创建的表替换旧的副本 当此进程运行时 原始表是可读的 但所有插入和更新都会停止 在大型表上 复制可能需要很长时间 有什么
  • 如何将 mechanize.Browser() cookie 保存到文件?

    我怎样才能使Python的模块mechanize 特别是mechanize Browser 将其当前的cookie保存到人类可读的文件中 另外 我该如何将该 cookie 上传到网页上呢 Thanks Deusdies 我刚刚参考了 Myk
  • gRPC 客户端不处置 Channel

    我正在使用 gRPC 开发 net core 2 0 应用程序并发现一个问题 删除对 gRPC 客户端类实例的引用后 仍然存在使用资源 内存和处理器 的通道 示例代码 public class MyClient ClientBase pub
  • 软标签上的 scikit-learn 分类

    根据文档 可以指定不同的损失函数SGDClassifier 据我了解log loss is a cross entropy理论上可以处理软标签的损失函数 即以一些概率 0 1 给出的标签 问题是 是否可以使用SGDClassifier wi
  • 在WSO2 ESB 4.7.0中,我们可以在接收序列中进行JMS回滚吗?

    我已经在 WSO2 ESB 4 7 0 中配置了带有事务和 CLIENT ACKNOWLEDGE 的 Apache ActiveMQ axis2 xml 配置是
  • Intellisense 不工作 golang 测试文件

    标题说明了一切 我打开一个测试文件 类型 package 什么也没有出现 这不是延迟问题 这不是一个空包裹 如何开启智能感知 更新 我已经向 VSCode Golang 团队提交了错误通知单 当我们找到更多信息时 我会在这里报告 https
  • ctypes:将字符串转换为函数?

    我正在读这篇文章在笔测试期间逃避防病毒软件的技巧 http pen testing sans org blog pen testing 2011 10 13 tips for evading anti virus during pen te
  • Restful Web 服务认证

    我有一个 Restful Web 服务 API 正在被不同的第 3 方使用 该 API 的一部分受到限制 您需要用户名 密码才能访问它 我想知道实施身份验证的最佳方法是什么 我使用的是 https 因此通信是加密的 我有两个想法 在用户开始
  • Qt 右键单击​​ QListWidget 打开上下文菜单并删除项目

    我想知道当我右键单击表格项目时如何打开弹出菜单 在弹出菜单中 应给出一些操作 例如添加和删除 这将创建新行或删除所选行 我是 Qt 世界的新手 所以如果有人能给我完整的详细信息 如果可能的话 提供代码 那么我将非常感谢他 她 谢谢 My g
  • Excel VBA:工作表保护未按预期工作

    使用 VBA 我试图禁止插入和删除行和列 同时允许用户编辑单元格内容 我希望以下调用能够解决问题 ActiveSheet Protect Password SomePassword AllowInsertingColumns False A
  • ASP.NET 2.5 前缀 ctl00 和 ASP.NET 4 不前缀 ctl00

    有谁知道为什么 ASP NET 4 放弃了ctl00ASP 控件上的前缀 有没有我错过的设置 在 ASP NET 4 0 中 他们引入了对更简洁的 HTML 语法的支持 你可以阅读相关内容在 Scott Gu 的博客 http weblog
  • 原生 Javascript 页面加载消息?

    我想要一个页面阻塞 加载脚本 该脚本将覆盖整个页面并在加载所有资源时显示 正在加载 消息 以避免无样式内容的闪烁等 我基本上想要类似的东西jQuery 的 BlockUI http jquery malsup com block page的
  • python 中的高斯-勒让德算法

    我需要一些帮助来计算 Pi 我正在尝试编写一个 python 程序来将 Pi 计算为 X 位数字 我已经尝试了 python 邮件列表中的几个 但它对我的使用来说太慢了 我读过有关高斯 勒让德算法 http en wikipedia org
  • 《使用 Rails 进行敏捷 Web 开发》一书:CSS 未应用

    我刚刚通过阅读著名的实用书架书籍 Agile Web Development with Rails 开始深入 Rails 的世界 到目前为止 我确实遵循了所有示例 但现在我被困在第 85 页 pdf 版本 其中应该将自定义 CSS 添加到项
  • XSLT - 从 URL 获取文件名

    我需要从 URL 获取文件名 URL 是动态的 并且斜杠的数量可以是不同的数量 我使用 xslt 1 0 所以寻找需要的东西 http DevSite sites name Lists note Attachments 3 image jp
  • 访问 NODE_ENV 在前端代码中有意义吗?

    我有一个正在部署的反应 节点应用程序 其中一个组件尝试访问 NODE ENV 以确定要使用的主机 URL localhost 或 heroku 我现在意识到 即使 NODE ENV 被设置为生产环境 它在浏览器上下文中始终是 未定义 的 因
  • Visual Studio 2017 ASP.NET MVC 核心模板中的 Bower 替换

    最近 我使用 Visual Studio 2017 15 6 3 从头开始 创建了一个 ASP NET MVC Core 项目 我发现了常用的 JavaScript 框架 引导程序 jquery jquery 验证 jquery 验证 不显
  • 最好使用私有方法还是受保护方法?

    在我的许多 PHP 项目中 我最终得到的类具有我不打算扩展的非公共函数 最好将它们声明为受保护的还是私有的 我可以从两种角度看待争论 将它们设为私有是一种更为保守的方法 但可以说 如果我希望扩展该方法 并且它清楚地表明哪些方法是由基类扩展的