0

私を悩ませ続けている質問があります。現在、Kohana 3.2 フレームワークの使用を開始しました。いくつかの機能を処理するためのヘルパーを作成しました。(あるべき姿であるが) STATIC と宣言されている多数のメソッドがあります。しかし、これらのメソッドはすべて何らかの形でデータベースを操作しているため、モデルをロードする必要があります。現在、すべてのメソッドには次のような非静的変数があります。

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

OK、うまくいっているようですが、クラス属性を使用してモデルのインスタンスを保持することで、この冗長性を取り除きたいと思いました (is クラスもあります)。

このようなもの:

プライベート静的 $comment; // 属性宣言
self::$comment = new Model_Comment; // これはヘルパー __constuct メソッド内で行われます
self::$comment->addComment("abc"); // メソッド内で呼び出します。

しかし、私は失敗しました:非オブジェクトでのメンバー関数 addComment() への呼び出し

質問: それは可能ですか? 多分他のアプローチがいくつかありますか?

長文失礼しました、アドバイスよろしくお願いします!:P

4

1 に答える 1

1

静的メソッドは、クラスのインスタンスを操作せずに非静的メソッドを呼び出すことはできません。したがって、あなたが提案しているものは機能しません。似たようなことを達成する方法があるかもしれませんが、次のことを試してみてはどうでしょうか。

「ヘルパー」クラスのシングルトンまたはファクトリ パターンを実装できます。次に、インスタンスをインスタンス化/返すときに、モデルを (属性として) 作成できます。「ヘルパー」クラスの実際のインスタンスがあれば、静的スコープの問題について心配する必要はありません。

つまり、ヘルパーのようなクラスをアプリケーションの「通常の」クラスとして作成し、作成時に常に必要なモデルを利用できるようにすることができます。このアプローチが理にかなっている場合は、さらにお役に立てれば幸いです。

デビッド

于 2011-12-29T22:51:27.223 に答える