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

如何在另一个类中使用一个对象:PHP框架,php,Php,这是我正在制作的框架的当前系统: 我在请求访问不存在的属性时创建了一个对象,该属性通过核心类中定义的\uu get函数具有现有类的名称。核心类扩展了每个类 所以它是这样工作的: class Someclass extends Core { public function classmethod() { $this->otherclass->method(); } } 这正是我想要的工作方式。但是,我不知道(经历了很多挫折之后)如何使用这个系统

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

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

所以它是这样工作的:

class Someclass extends Core
{
    public function classmethod()
    {
        $this->otherclass->method();
    }
}
这正是我想要的工作方式。但是,我不知道(经历了很多挫折之后)如何使用这个系统编辑/创建对象的属性

这样的事情是行不通的

$this->view->somevar = "newvalue"; // this doesn't work. 
我猜它与_集函数有关,但我没能发现

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

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

我很想看看如何使用这些模式中的一种来实现我正在尝试做的事情

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

我正在使用自动加载。


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

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

在启动框架之前,您可能需要查看:

现在回到你的问题,如果你用uuu get来获取一个值,你也可以用uu set来设置一个值

__construct方法的存在是为了允许您使用对象所需的所有数据初始化对象,以实现其唯一目的。避免_________________________________。您可能需要注意实线中的D,以便了解依赖项反转的真正含义并理解它


使用_uset完全失去了输入提示接口等功能。因此,代码可能会出现真正的错误,并且很难遵循,因为流的定义不是很好,分配是通过magic在后面完成的。此外,我还可以提出100万个其他原因,说明您尝试使用的体系结构是错误的,但我将把这一点留到其他时间。

您好,这个问题和您的其他问题表明您正在制作一个与codeigniter有许多相似之处的框架。我知道这并不能直接回答你的问题,但是你有没有检查codeigniter的源代码,codeigniter是一个非常受欢迎的项目,他们做一些你在问题中提出的Exacgt事情。@dm03514事实上,我的目标与codeigniter类似,但更简单、更轻松。我希望在这个过程中能学到很多东西。谢谢,我会查一下源代码的!问题是,我的时间非常短缺,这就是我问这些问题的原因。@Rasteril,为什么不这样做:
$this->view->somevar=“newvalue”工作?我想它与
\u set
功能有关。。嗯,您猜对了,我没有看到您正在调用的类的任何实现代码,看看您是如何实现
\u set
方法和/或它是如何被继承的会很有帮助。@Rasteril您还可以看看,一个包含了一些新的PHP开发概念的PHP微框架我想为我的项目创建一个轻量级的框架,但这让我信服了。我学习Codeigniter会更好。我犯了很多错误,不仅仅是在这段代码中。但是,这是一次很好的学习经历。不要低估学习创建或尝试创建自己的框架的经历。你仍然应该把它作为一个辅助项目。理解你所做的决定为什么是错误的,是理解更大概念的一大步。我会继续这样做,看看你将来会遇到什么问题。这将有助于AOLT.PS:如果你想建立一个应用程序,并想使用已经存在的框架,你应该考虑所有的选项:CODEGITENER,蛋糕(目前没有一个是我的最爱),SimfONE 2(真正的好框架,基于坚实的概念),SIEX(基于s2组件的微框架,非常适合API/rest接口)、laravel、zend framework(不是我的选择,而是大量的组件)等。根据您的要求选择:)我最终选择了Codeigniter,因为它在互联网上有很多很好的文档和教程。我不会低估你的学习经历,你是绝对正确的。谢谢你的帮助。