components 的寻找顺序?


<?php $this->widget('application.components.columnlists.abc'); ?>

如果我在 components.homepage 中也有一个 abc.php 的类的话,貌似以上代码可能调用的是 components.homepage 下的 abc.php 类,而不一定是 components.columnlists 下的 abc.php 类?

如果你之前已经import过另一个abc的话,那么它具有优先级。

嗯,原来如此此。请问一下,像我的举例中,在同一个页面中同时引入两个相同的 components 的话,应该怎么处理会得到正确的结果呢?多谢。

PHP是不支持同名的类的(PHP5.3)之前。

我想hiscaler的意思是,是否可以优先使用后来import的com,事实上我也遇到此问题,在另外一个帖子也提出来了

希望qiang,可以 给个提示~

对不起,我说错了。如果同样的类名(不同的alias)多次import,以最后一次为准。

嗯。不过我想是这样命名 com 下的类名的话会不会好一些。比如 homppage 子目录下的类名为 homepage_abc.php,column 目录下的类名为 column_abc.php,这样的话利于将 com 按功能模块细分类。

嗯,这一点我测试过,确实如你所说的,

但我觉得,即使是同名的alias,是否也以最后一次为优先呢?

顶一下!~

希望得到 qiang 关于最后import 的alias转为最优先加载的做法的理解~

顶一下这个问题。

不知大家的习惯是怎么样的。我说一下我的习惯。如果是小项目,我一般都是直接放在 components 目录下,大点的项目,比如新闻有一个“最近更新”,产品也有一个“最近更新”,我的作法一般是分别建立 news 和 products 目录,分别存放 news 和 products 的 Recently 部件。这样的话,在同一个页面中分别调用




$this->widget('application.components.News.Recently');

$this->widget('application.components.Products.Recently');



这样的话,产品的 Recently 是没有作用的,渲染的依旧是 News 的 Recently.

顶一顶,让 qiang 看到。呵呵。

我觉得可以考虑使用一个component。

如果可以通过调用的时候穿些参数解决的话。

这样代码重用性,可维护性又高了。

毕竟component愿意就是将需要公用类的提取出来,这样做违反了初意。

你可能误解了意思,比如 News.recently 和 product.recently 这个是太可能做成通用的。我这样的做法只是目录结构更加清晰一点。比如 新闻的 hots recently 全部在 News 目录下。这样的目录是不是清晰一点呢?