在Kohana动态声明的字段

时间:2013-05-16 08:14:17

标签: php kohana

我一直在使用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正在给我一个通知,以及我是否以正确的方式处理事情。

2 个答案:

答案 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');