2013-05-16 40 views
3

我一直在用Kohana 3.3構建一個應用程序,並且最近將開發從Coda 2(一個文本編輯器)切換到PhpStorm 6 - 一個IDE。Kohana中動態聲明的字段

PhpStorm 6已經非常方便地指出潛在的代碼氣味;它促使我從附加數據到使用__set($key, $value)魔術方法的視圖轉而使用bind($key, $value)方法。

PhpStorm 6抱怨的另一件事是,我是動態聲明域。

我有子類Controller_Template,和我附上我的看法,以我的模板是這樣的:

public function action_index() { 
    # Create the view 
    $view = View::factory('project/list'); 

    # Attach the view to the template 
    $this->template->content = $view; 
} 

顯然,content動態聲明。我一直在檢查這個類的層次,我找不到在任何地方聲明的content屬性(因此我認爲它爲什麼是動態的)。這是代碼味道嗎?動態聲明不好?我可以在某處明確聲明content屬性嗎?

就這樣,代碼起作用。我只是想了解爲什麼 PhpStorm給了我一個通知,以及我是否以正確的方式處理事情。

回答

2

PHP的優點和缺點是動態類型。在某些情況下它很方便,但在另一個方面令人不快。你在這裏顯示令人生氣的例子。你知道,$view是繼承於View(例如)的對象,所以你知道你可以使用哪些函數。如果你什麼都不亂,總會有View類型的對象。

Phpstorm沒有這些信息,這就是爲什麼你看到警告。他希望你也要小心這個代碼,但在這種情況下,你什麼都不能做。在Java中,你不能也投$viewView,如:

$this->template->content = (View)$view; //impossible :(

$view$this->template->content是動態類型變量,你不能改變它。只要注意不要將其他類型分配給您的變量,並且一切都應該正常工作。

+1

很好的解釋。謝謝! –

1

我想給Kasyx給出的答案添加一些信息。他所說的一切都是正確的,但如果你討厭動態打字或者對你的觀點做了一些清晰的說明,可以在kohana中設置變量。 (模板僅僅是另一種看法;))

您還可以設置與set()功能(docs意見變量),例如:

$view->set('foo', 'my value');