php 框架中的全局变量开销

2023-12-24

我目前正在开发一个框架,它使用一个对象Core类(此类具有巨大的功能并使框架正常工作)。该框架遵循 MVC 架构并具有松散耦合的模型、控制、视图类。这些类需要引用Core课重。到目前为止我所做的是:创建单个对象Core类并通过 PHP 关键字引用它global在模型、控制、视图类中。

我不喜欢使用这种方法主要是因为:

  • 在我看来,这种方式不是真正的面向对象方式
  • IDE (netbeans) 无法为该对象提供文档Coreclass - 对于使用这个框架的开发人员来说是一个痛苦。
  • 我真的很担心性能问题- 不知道是否global速度较慢或其他什么。

我进行了搜索,没有找到任何有关性能问题的信息。我还搜索了 stackoverflow 并发现使用全局会产生任何开销吗? https://stackoverflow.com/questions/181285/does-using-global-create-any-overhead & PHP中全局变量和函数参数之间的优缺点? https://stackoverflow.com/q/2216340/493329等链接,但它们不包含太多信息。现在我最关心的是性能,所以请帮忙。


我必须同意NevilleK https://stackoverflow.com/questions/7345636/php-global-vairable-overhead-in-a-framework/7345923#7345923,你的 Core` 类听起来像一行神物 http://c2.com/cgi/wiki?GodObject反模式。

对于任何愚蠢到建议使用单例/注册表的人,我建议对这个主题做一些研究。它们创建与经典全局变量相同的全局状态。

全局状态与性能无关(尽管在 php 中它有一些较小的影响),但它创建了不可测试且紧密耦合的代码。

你真的应该调查一下依赖注入。这可能会向您展示另一种方式,不需要这样的Core您的代码中的类。


为您提供一些额外的视频:

  • 全局状态和单例 http://www.youtube.com/watch?v=-FRm3VPhseI
  • 不要寻找东西! http://www.youtube.com/watch?v=RlfLCWKxHJ0
  • 高级面向对象模式 http://vimeo.com/21173483
  • 蛋糕是一个谎言 http://techportal.inviqa.com/2011/03/15/dpcradio-the-cake-is-a-lie/
  • 简洁的代码:参数 http://vimeo.com/13439458
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 框架中的全局变量开销 的相关文章

  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • 如何使用 php 发送服务器错误响应?

    一旦用户点击删除按钮我的 jQuery 脚本要求服务器删除所选项目 现在我想要我的php发送成功或错误响应的脚本 是否有可能触发错误回调万一该项目无法删除 Thanks 我的 jQuery 代码 ajax type post url myA
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 如何知道Matlab中系统命令执行过程中经过的时间?

    我有一个运行系统脚本的 Matlab 代码 该脚本可能会因命令运行而停止 我想知道是否有一种方法可以让程序知道它是否花费了很长时间并执行其他操作 这是代码 tic status cmdout system iperfcmd The prog
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一

随机推荐

  • IPC、域袜子、命名管道

    IPC 和 Unix 域套接字和命名管道有什么区别 我从各种书籍中得到了模糊的定义 但无法弄清楚应该在哪里使用哪个定义 两个进程相互通信的任何方式都可以被视为 IPC 的一种形式 例如 未命名管道 cat file txt grep foo
  • 错误:任务“:app:processDebugGoogleServices”执行失败。 > 请修复版本冲突

    将我的 google play 服务更新到版本 28 后 我收到此错误 我不确定为什么会发生这种情况 因为它之前工作正常 这是我的构建 gradle file apply plugin com android application app
  • C# ListView DragDrop 事件方法每次拖放执行两次

    该方法连续执行两次 并且没有明显的理由这样做 它发生在 VS2010 Express 4 0 和 VS2008 3 5 中 public GUI InitializeComponent this lvwFiles DragDrop new
  • 将 RandomAccessSlice 转换为 RandomAccessCollection

    当我们尝试从一个数组中检索一系列元素时Array 我们得到一个ArraySlice let array 1 3 5 2 let arraySlice array lt 2 elements up to index 1 1 3 我们可以把它改
  • tox多次测试,重用tox环境

    是否可以使用单个 tox 虚拟环境执行以下操作 tox envlist test pylint flake8 mypy skipsdist true testenv lint deps pylint commands pylint test
  • 如何在android中使用.csv文件?

    我正在 Android 中做一个示例测验应用程序 我使用数组来存储问题和答案 现在我希望将问题和答案存储在 csv文件 是可以解析的 csv安卓中的文件 CSV 代表逗号分隔值 wiki 上可以找到很好的解释 CSV http en wik
  • 更改 Magento 产品页面上的文本“选择一个选项...”

    我创建了一个可配置的产品 它有三个选项 color size and style 现在在产品页面中 每个选项都有默认文本 选择一个选项 在下拉菜单中 但我希望文本应该是 选择颜色 选择大小 and 选择款式 我在 app code core
  • JSONDecodeError:需要 ',' 分隔符:第 1 行第 43 列(字符 42)

    我已经在这里读过很多例子了 不幸的是 我不断收到此错误 Error json decoder JSONDecodeError Expecting delimiter line 1 column 43 char 42 json 文件 peop
  • Puppeteer:无法启动浏览器进程!产卵

    当我尝试跑步时node app js 我收到错误 该消息是无法启动浏览器进程 产卵 Users iliebogdanbarbulescu Downloads firstProject node modules chromium lib ch
  • 文件系统树形视图

    我正在使用文件系统 并且我有一个文件对象的 List 这些文件对象将文件路径作为属性 基本上 我需要在 NET 中创建一个树视图 但我很难想出执行此操作的最佳方法 因为我需要从如下列表创建树结构 C WINDOWS Temp ErrorLo
  • 连接sql中的所有列值

    如何将从 sql 查询返回的不同行的所有列值合并为一个值 这是一个例子 查询返回 FOO RES1 RES2 RES3 现在我想要得到如下结果 FOOCONCAT RES1RES2RES3 有什么方法可以在sql中做到这一点吗 In SQL
  • 如何防止 MSI 错误:正在安装另一个程序?

    我编写了一个小 PowerShell 脚本 它调用不同的 MSI 文件来安装软件 有时我从 Windows Installer 中收到以下错误 正在安装另一个程序 请等待安装完成 然后再次尝试安装该软件 在调用 MSI 文件之前如何防止此错
  • 在 servlet 中从文件系统提供静态图像文件?

    如何通过 servlet 在文件系统中提供图像文件 看看这里 示例 Depot 在 Servlet 中返回图像 http www exampledepot com egs javax servlet GetImage html 链接已损坏
  • google-apps-script 用于编辑 Gmail 主题行

    问题是这样的 你可以搜索一下 发现很多人抱怨这个问题 假设您出售某种商品 例如经营一家在互联网上销售的小企业 并使用 PayPal 接受付款 PayPal 发送的每一条付款通知均具有完全相同的主题行 收到付款通知 因此 如果您收到 Bobb
  • KitKat版本之前的Android中如何获取短信应用程序(默认)的包名?

    Android KitKat版本之后 我们可以通过 Telephony sms getDefaultSmsPackage context 找到默认的短信包名称 但是如何获取 KitKat 版本之前的包名称呢 请参考这个http androi
  • 在线程之间划分奇数数量

    我刚刚学习 Java 中的线程 我想按字母顺序对单词列表进行排序 我的程序读取 txt 文件中的单词并将它们放入字符串数组中 用户可以自己选择要使用多少个线程 我想将数组分割成均匀 尽可能 的块 线程可以自行排序 所以我的问题是 如何在线程
  • 在父进程退出时杀死子进程

    我对 C 和编程非常陌生 需要一些帮助 在 linux cygwin 上的 c 中 我需要在退出时删除所有子进程 我看过其他类似的问题 但无法使其发挥作用 我试过了 atexit killzombies in parent process
  • 设定百分比内的局部最大识别(不利情况下触发 True)

    寻求识别 标志 True 何时 col1 中的当前值下降到低于 col1 中最近达到的局部最大值设定的百分比 这样就会有多个这样的信号 如达到最大值并且当前值下降设定的百分比 即自动重置 除了百分比之外没有设定阈值 请注意 标志 True
  • 使用 MSBuild 调用设置 AssemblyFileVersion?

    我们有一个基于批处理的构建过程 并且我们仅使用 MSBuild 从 Visual Studio 编译我们的项目文件 我们还将 wix 集成到我们的构建过程中 为了设置软件的版本 我们在主构建脚本中指定了一些在构建过程中使用的环境变量 我的问
  • php 框架中的全局变量开销

    我目前正在开发一个框架 它使用一个对象Core类 此类具有巨大的功能并使框架正常工作 该框架遵循 MVC 架构并具有松散耦合的模型 控制 视图类 这些类需要引用Core课重 到目前为止我所做的是 创建单个对象Core类并通过 PHP 关键字