如何在另一个类中使用一个对象:PHP框架


How to use one object in another class : PHP framework

这是我目前正在制作的框架系统:

我在请求访问一个不存在的属性时创建了一个对象,该属性通过Core类中定义的__get函数具有一个现有类的名称。Core类继承了每个类。

它是这样的

class Someclass extends Core
{
    public function classmethod()
    {
        $this->otherclass->method();
    }
}

这正是我想要的工作方式。然而,我不知道(经过很多挫折)如何编辑/创建对象的属性,使用这个系统。

所以像这样的东西是行不通的。

$this->view->somevar = "newvalue"; // this doesn't work. 

我猜它与__set函数有关系,但我没能发现。

关于如何解决这个问题,我收到了以下建议:

依赖注入、命名空间、单例模式。

我想看看如何实现我正在尝试使用这些模式之一。

我不知道该选择哪个来实现我的简单问题:在其他类中使用对象,所以我不需要把任何东西放入__construct的参数或使用全局变量。

我使用__autoload.

我希望我能在你的帮助下解决这个问题。

首先,您尝试的架构非常糟糕。显然,您正在使用"魔法"来创建附加到其他对象的属性对象。这很糟糕,因为如果您使用_get/_set,您很快就会遇到问题。另外,从一个共同的父类扩展也是一件坏事,因为它会产生巨大的继承树,并且它允许大多数对象具有多个职责。

在开始使用框架之前,您可能需要查看:SOLID

现在回到你的问题,如果你使用__get获取一个值,你也可以使用__set设置一个值。

__construct方法的存在是为了允许你用它所需要的所有数据来初始化对象,以实现它的唯一目的。避免__construct有点愚蠢,并且违背了目的。为了了解依赖倒置到底是什么并理解它,你可能需要注意SOLID中的D。

使用__set完全失去了对接口进行类型提示等的能力。因此,代码可能会变得非常有bug,并且难以遵循,因为流没有很好地定义,并且分配是在后台通过魔术完成的。此外,我可以想出一百万个其他的原因,你正在尝试使用的架构是错误的,但我将留在另一个时间。