访问类内的全局变量
简介
从类内访问全局变量的困境是面向对象中遇到的常见挑战编程。本文专门解决了 PHP 中的问题,为“在非对象上调用成员函数 query()”错误提供了替代解决方案。
问题
在提供的代码片段中,致命错误是由于尝试在 pigi 类的 get_records() 方法中调用 $db 变量上的 query() 方法而引起的。根本原因是类和全局 $db 对象之间缺乏已建立的连接。
替代解决方案
1.依赖注入
依赖注入是一种设计模式,涉及将所需的对象作为参数传递给类。在这种情况下,数据库连接对象(即 $db)将被注入到 pigi 类的构造函数中。此方法确保类可以访问全局变量,而无需求助于全局范围。
2.方法参数注入
或者,数据库连接对象可以作为参数传递给 get_records() 方法本身。虽然这种方法不一定会改进封装,但它可以在管理依赖项方面提供更大的灵活性。
依赖注入的好处
1。松耦合:
依赖注入促进类之间的松耦合,使得更容易根据需要交换依赖关系。在这种情况下,无需修改 pigi 类的代码即可直接切换到不同的数据库连接。
2.单元测试:
通过参数传递依赖关系,可以更高效地进行单元测试。不是同时测试多个类,而是仅测试特定单元(在本例中为 pigi 类)。
结论
依赖注入和方法参数注入都为访问全局变量提供了可行的解决方案在一个班级内。两种方法之间的选择取决于应用的具体设计要求。最终,这两种方法的目的都是保持封装性,同时提供对必要的外部资源的访问。
以上是如何正确访问 PHP 类中的全局变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),