- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 MVC 几个月了,我将所有内容都存储在我的 $registry 对象中。当我创建一个新类时,我通常只传递注册表,但在创建新类时我不得不不断地传递 $this->registry
。
例如
class something
{
public function __construct($registry)
{
$this->registry = registry;
$this->db = $registry->db;
$this->user = $registry->user; // ......
}
public function something()
{
$class = new something_class($this->registry);
$class->do();
}
}
class something_class
{
public function __construct($registry)
{
$this->registry = $registry;
}
public function do()
{
echo 'Doing something ....';
}
}
我的问题是,如何在注册表类中以某种方式处理将注册表传递给幕后的新类(在本例中是在实例化 something_class 时)?我绝对相信有一种简单的方法可以做到这一点,但我找不到任何与我正在寻找的东西相关的东西。
这是我的注册表类:
<?php
class registry
{
protected $vars = array();
public function &__set($index, $value)
{
$this->vars[$index] = $value;
return $value;
}
public function &__get($index)
{
return $this->vars[$index];
}
}
最佳答案
这都是错的。 “注册表”是一种反模式,您正在做的是不是依赖注入(inject)。你已经找到了一种伪造全局变量的方法..就是这样。
作为开始,请观看this lecture .
至于如何正确的做你想做的,有两种方式:
要了解如何使用 DI 容器,您只需查阅文档即可。但我会解释工厂的基础知识,这更像是一种 DIY 方法
工厂是一个对象,负责初始化其他类。例如,您有一大组类,它们需要 PDO
作为依赖项。
class Factory
{
private $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function create($name) {
return new $name($this->pdo);
}
}
如果您使用此类的实例,它会让您创建对象,这些对象的 PDO 已经作为依赖项传递到构造函数中:
$factory = new Factory(PDO($dsn, $user, $pass));
$user = $factory->create('User');
$document = $factory->create('Doc');
作为一个额外的好处,此设置将使机器人 User
类实例和 Doc
类实例共享相同的 PDO 对象。
关于php - 如何避免将我的 $registry 容器手动传递到我创建的每个新类的构造函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39246777/
我的 Dojo 应用程序包含几个小部件,它们都在 dijit.registry(dijit.WidgetSet 的一个实例)中自动注册。我想利用 filter() ( Link ) 或 map() (
yarn 添加 v1.3.2 [1/4] 解析包... 错误 发生意外错误:“https://registry.yarnpkg.com/react:getaddrinfo EAI_AGAIN regi
我知道 Docker Hub,而且我知道您可以在其上创建自己的存储库。 但是,当您想创建多个私有(private) repo 时,您必须付费。 所以我想要我自己的使用自签名证书的 Docker Reg
在 boostrapper package.xml 中,我试图从注册表中读取 MSSQL 条目,例如: 运行结果 setup.exe 后,我在日志中得到: “正在读取注册表项 'HKLM
每当我尝试将容器从本地计算机推送到 Google Container Registry 时,都会收到以下错误: denied: Unable to access the repository; ple
我的示例问题是 Vaclav .我已经按照 GCR 快速入门开始了这封信,其中需要创建一个新项目(称为 gcr-project)并复制 Flask(python)应用程序的代码。 构建docker镜像
不确定 SO是提出以下问题的正确论坛。如果不是,请将它们移到正确的位置。 我想设置一个 Docker Private Registry, 但是在阅读了 Docker 的文档(和 related SO
目前,我们的 CI/CD 环境是基于 Kubernetes 的云。 由于性能优势,Kubernetes 云提供商最近删除了 docker 守护程序。例如,Google Kubernetes Engin
我在 output1 和 output2 中得到了不同的结果。第一个给了我在注册表中实际看到的值,而后者只给了我默认值。我想念什么? String output1 = Registry.GetValu
我正在为 Inno Setup 中的程序编写安装程序。我的程序使用网页和 Internet Explorer 与之交互。 我的一些查询需要超过 10 秒,我注意到在我 friend 的计算机上,他有一
我正在为 docker 编写一个 API 客户端,而注册表 API 很难使用。我正在尝试从注册表中删除图像,但是我不断收到此错误 [ { code: 'UNSUPPORTED', message: '
我目前正在尝试通过 Java 应用程序查询和设置一些 Windows 注册表项。我们被授权使用 JNI-Registry 库(出于许可原因)。要设置的键和值不在我的控制之下(我正在修改由另一个第 3
首先,我想将此问题仅限于 Web 开发。因此,只要该语言用于 Web 开发,这就是语言不可知的。就个人而言,我是从 PHP 背景而来的。 通常我们需要使用来自多个作用域的对象。例如,我们可能需要在正常
Google Container Registry documentation解释说为了将图像拉入和推送到 gcr.io,您必须添加前缀 docker push和 pull带有 gcloud prev
我在使用 npm 安装 Cordova 时遇到问题。 从这里找到的答案,诀窍是运行 npm set registry https://registry.npmjs.org/这个命令究竟做了什么,为什么
我们有一个用于 Python 包的 Google Artifact Registry。鉴权工程like this .在本地运行良好。 但是,当我想要构建需要从我们的私有(private)注册表安装包的
我使用 GCR 来存储我团队的私有(private) docker 注册表。我有一个 docker 图像,我想公开显示,以便多个项目可以使用它/与客户共享/等等。 如何在 Google 的 Conta
我有 表 和 标签 具有多对多关系,以及连接表 post_tags。如果帖子有一个特定的标签名称,我想从帖子中返回所有标签。 这个想法是按特定标签过滤所有帖子。 我是这样做的: const posts
Registry 类和Naming 类有什么区别。 在我的应用程序中,我使用了 Registry 类。但我想了解 Naming 类及其用途? 最佳答案 区别在于Naming是一个带有静态方法的工具类,
我在公司网络上工作。 尝试安装 npm. 但我一次又一次地收到此错误。 $ npm install npm ERR! Windows_NT 6.1.7601 npm ERR! argv "C:\\Pr
我是一名优秀的程序员,十分优秀!