很簡單!
假設您有一個模型稱爲文章。你將有三類稱爲BaseArticle.class.php和Article.class.php和ArticleTable.class.php
這裏是每個類的定義:
BaseArticle.class。 php:這個類有你的模型定義(或你的表定義)。你不想編輯這個類永遠!
Article.class.php:是一個可以爲您的模型編寫替代方法的地方。當您擁有文章類的實例時,您只能訪問這些功能。 所以你只能通過一個對象來調用它們。例如:
class Album extends BaseArticle {
public function getSummary(){
....
}
}
使用它,你應該這樣做:
$article=new Article();
$article->getSummary();
ArticleTable.class.php:這是你想要編寫功能,這些功能爲您的整個文章talbe (或者最好對整個文章模型說)。 考試你想找到最受歡迎的文章,你不能寫這個函數到你的文章類,因爲它只適用於一個對象。但是你想在你的桌子上做這個。所以:
class AlbumTable extends Doctrine_Table {
public static function getPopularArticles() {
}
}
,你必須使用這樣的,如果你的職責是靜態的:
ArticleTable::getPopularArticles();
,如果你的函數不是靜態的,你可以使用打電話給他們:
Doctrine_Core::getTable('Product')->your_nonstatic_function();
也爲什麼你說ArticleTable功能/方法必須是靜態的?我在這裏有幾個方法不是靜態的,但工作正常。 – user1020069 2012-08-01 18:42:36
,因爲你想在沒有Instantiation的情況下調用這些函數,在這種情況下,你的函數應該是靜態的。否則您可以使用ArticleTable :: getXXX() – Firouziam 2012-08-01 19:06:03
Firouziam訪問它們,您將ArticleTable的實例與Article的實例混淆。 Table方法的許多(如果不是大多數)用法不是靜態的。要調用非靜態Table方法,你應該使用我在我的答案中包含的代碼:Doctrine_Core :: getTable('Product')這將檢索表類的一個實例,以允許調用非靜態函數。 – Omn 2012-08-07 20:30:31