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

时间:2012-12-30 15:04:32

标签: php

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

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

所以它的工作原理如下:

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

这完全符合我希望它的工作方式。但是,我不知道(经过很多挫折之后)如何使用这个系统编辑/创建对象的属性。

所以这样的事情都行不通。

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

我想它必须对__set函数做一些事情,但我没找到。

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

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

我很想知道如何使用其中一种模式实现我想要做的事情。

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

我正在使用__autoload.

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

1 个答案:

答案 0 :(得分:2)

首先,您尝试的架构非常糟糕。显然,您正在使用“魔法”来创建作为属性附加到其他对象的对象。这是不好的,因为如果你使用_ get / _set,你将很快就会遇到问题。从普通父级扩展也是一件坏事,因为它会生成巨大的继承树,并且它允许大多数对象具有多个响应性。

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

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

__构造方法是为了允许您使用所需的所有数据初始化对象,以实现其唯一目的。避免__construct有点愚蠢,并且失败了目的。你可能想要注意SOLID中的D,以便了解Dependency Inversion究竟是什么并理解它。

使用__set完全失去了键入接口等功能。因此,代码可能变得非常错误并且难以理解,因为流程没有很好地定义,并且分配是通过魔术在后面完成的。此外,我可以提出100万个其他原因,您尝试使用的架构是错误的,但我会将其留下另一个时间。

相关问题