3

我一直在使用 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是动态声明的。我一直在检查类层次结构,但在任何地方都找不到content声明的属性(因此我想它为什么是动态的)。这是代码味道吗?动态声明不好吗?我可以在content某处明确声明该属性吗?

事实上,代码有效。我只是想了解为什么PhpStorm 会通知我,以及我是否以正确的方式处理事情。

4

2 回答 2

2

PHP 的优点和缺点是动态类型。在某些情况下它很方便,但在另一种情况下很烦人。你在这里展示了令人讨厌的例子。您知道,这$view是继承自View(例如)的对象,因此您知道可以使用哪些功能。如果你什么都不弄乱,总会有View类型对象。

Phpstorm 没有此信息,这就是您看到警告的原因。他希望你也小心这段代码,但在这种情况下你不能什么都不做。您也不能在 Java中$view转换为like:View

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

$view并且$this->template->content是动态类型变量,您无法更改它。请注意不要将其他类型分配给您的变量,一切都应该正常工作。

于 2013-05-16T08:31:00.197 回答
1

我想在 Kasyx 给出的答案中添加一些信息。他所说的一切都是正确的,但是如果您讨厌动态类型或希望清楚地了解您的观点正在做什么,那么可以在 kohana 中设置变量。(模板只是另一种观点;))

您还可以使用set()函数 ( docs ) 在视图中设置变量,例如:

$view->set('foo', 'my value');
于 2013-05-17T07:11:59.960 回答