2011-12-29 78 views
0

我有一個一直困擾我的問題。目前,我已經開始使用Kohana 3.2框架。我寫了一個幫助器來處理一些功能 - 我有很多方法,它們(應該是)聲明爲STATIC。但是,所有這些方法都以某種方式與數據庫一起工作,所以我需要加載模型。目前,每種方法都有這樣的非靜態變量:Kohana的輔助屬性

$ comment = new Model_Comments;
$ comment-> addComment(「abc」);

好的,它似乎在工作,但後來我想通過使用class屬性來保存模型的實例(以及class)來擺脫這種冗餘。

事情是這樣的:

私有靜態$評論; //聲明屬性
self :: $ comment = new Model_Comment; //這是幫助__constuct方法內完成
自:: $ comment-> addComment( 「ABC」); //在方法中調用它。

但是,我得到了失敗:是有可能做到這一點:非對象

問題是調用一個成員函數addComment()?也許還有其他一些方法?

對不起了很長的故事,並感謝諮詢! :P

回答

1

靜態方法不能沒有對類的實例操作調用非靜態方法。所以,你提出的建議是行不通的。可能有辦法做到完成關於嘗試類似的東西,但什麼如下:

您可以實現單件或工廠模式爲你的「助手」類。然後,您可以在實例化/返回實例時創建模型(作爲屬性)。通過您的「助手」類的實際實例,您不必擔心靜態範圍問題。

換句話說,你可以創建一個輔助類類作爲應用程序中的「正常」類,在創建時,總是有足夠的可用模型。 如果這種方法有意義,我很樂意進一步提供幫助。

David

+0

嗯。似乎太複雜了。爲了兼容性,我也完成了靜態模型方法。你怎麼看,這是好的方法? – Dmitri 2011-12-29 23:36:27

+0

你在模型方法中的兼容性是什麼意思? – dscone 2012-01-01 05:48:28