我一直在使用Kohana 3.3构建一个应用程序,最近将开发从Coda 2(文本编辑器)转换为PhpStorm 6 - 一个IDE。
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
是动态声明的。我一直在检查类heirarchy,我找不到任何地方声明的content
属性(因此我猜它为什么是动态的)。这是代码味吗?动态声明不好吗?我可以在某处明确声明content
属性吗?
实际上,代码有效。我只是想了解为什么 PhpStorm正在给我一个通知,以及我是否以正确的方式处理事情。
答案 0 :(得分:2)
PHP的优点和缺点是动态类型。它在某些情况下很方便,但在另一种情况下很刺激。你在这里展示了令人恼火的例子您知道,$view
是继承自View
的对象(例如),因此您知道可以使用哪些函数。如果你没有弄乱任何东西,总会有View
类型的对象。
Phpstorm没有这些信息,这就是为什么你会看到警告。他希望你也要小心这段代码,但在这种情况下你不能做任何事情。您也不能像在Java中那样将$view
强制转换为View
:
$this->template->content = (View)$view; //impossible :(
$view
和$this->template->content
是动态输入变量,您无法更改它。请注意不要为变量指定其他类型,一切都应该正常。
答案 1 :(得分:1)
我想在Kasyx给出的答案中添加一些信息。他说的一切都是正确的,但是如果你讨厌动态打字,或者你的观点正在做些什么,那么可以选择在kohana中设置变量。 (模板只是另一种观点;))
您还可以使用set()
函数(docs)在视图中设置变量,例如:
$view->set('foo', 'my value');