0

我有一个问题一直困扰着我。目前,我已经开始使用 Kohana 3.2 框架。我编写了一个助手来处理一些功能 - 我有许多方法,它们(应该是)声明为 STATIC。但是,所有这些方法都以某种方式与数据库一起工作,所以我需要加载一个模型。目前,每个方法都有一个像这样的非静态变量:

$comment = 新的 Model_Comments;
$comment->addComment("abc");

好的,它似乎正在工作,但后来我想通过使用类属性来保存模型的实例(也使用 is 类)来摆脱这种冗余。

像这样的东西:

私人静态$评论;// 声明属性
self::$comment = new Model_Comment; // 这是在辅助 __constuct 方法中完成的
self::$comment->addComment("abc"); // 并在方法中调用它。

但是,我失败了:调用非对象上的成员函数 addComment()

问题是:有可能做到吗?也许还有其他一些方法?

对不起,说来话长,谢谢您的建议!:P

4

1 回答 1

1

如果不对类的实例进行操作,静态方法就不能调用非静态方法。所以,你的提议是行不通的。可能有一种方法可以完成类似的事情,但是尝试以下方法怎么样:

您可以为您的“助手”类实现单例或工厂模式。然后,您可以在实例化/返回实例时创建模型(作为属性)。使用“助手”类的实际实例,您不必担心静态范围问题。

换句话说,您可以在您的应用程序中创建一个类似助手的类作为“普通”类,在创建时,它始终具有可用的必要模型。如果这种方法有意义,我很乐意提供进一步的帮助。

大卫

于 2011-12-29T22:51:27.223 回答