Yii在import方面已经做的很好了,很多人都说Yii无法导入命名空间,事实上官方很早就给出过意见,如这里:http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.namespace,当然,这是中文版的
4. Namespace
不要将路径别名和名字空间混淆了,名字空间是指对一些类名的一个逻辑组合,这样它们就可以相互区分开,即使有相同的名字。 而路径别名是用于指向一个类文件或目录。路径别名与名字空间并不冲突。
提示: 由于 5.3.0 版本之前的 PHP 本质上不支持名字空间,你无法创建两个具有相同名字但不同定义的类的实例。 鉴于此,所有的 Yii 框架类都以字母 'C'(意为 'Class') 作前缀,这样它们可以区分于用户定义的类。我们建议前缀 'C' 只保留给 Yii 框架使用,用户定义的类则使用其他的字母作前缀。
5. 使用命名空间的类
使用命名空间的类是指一个在非全局命名空间下声明的类。比如说,类application\components\GoogleMap
在命名空间application\components
下的类。使用命名空间需要 PHP 5.3.0 或者以上版本。
从1.1.5开始,可以无需显式引入而使用一个包含命名空间的类。比如说,我们可以创建一个application\components\GoogleMap
的实例而无需去处理引入的路径,这样就增强了Yii的自动导入机制。
若要自动导入使用命名空间的类,命名空间的格式必须和路径别名相似。比如说,类application\components\GoogleMap
所对应的路径必须和别名application.components.GoogleMap
一致。
----------
如果仅看中文版,或许你还是看不懂,但你应该看英文版的,下面还有评论,你就知道怎么用了
评论是这个样子的,LOOK,http://www.yiiframework.com/doc/guide/1.1/en/basics.namespace:
Namespaces in php are like directory paths in console (bash, dos etc)
When you use namespace
php keyword like this
namespace a\random\namespace; class Foo { static function bar(){} }
is like executing cd a\specific\directory
except that the namespace is created if not exists.
Now everything follows is belonging to that namespace. This means that if you want to instantiate, extend or call a static method from eg foo
class on another namespace you have to
//The leading backslash '\' here denotes the global namespace that //is the root folder or C:\ counterpart from console environment $baz= new \a\random\namespace\Foo; class Fighter extends \a\random\namespace\Foo {} \a\random\namespace\Foo::bar();
Yii imports a very intuitive convention here that the namespace structure (if implemented) should be reflected on the physical directory structure and additionally makes its Path Alias convenience available for that purpose.
Please be my guest to follow these steps:
1. Create a new web app 2. Go to protected\components
and create a folder foo
3. Move Controller.php
in foo
folder and open it with an editor 4. At line 6, at Controller
class declaration import this:
namespace application\components\foo; class Controller extends \CController //Note the leading backslash here
- Now open
protected\controllers\SiteController.php
for editing - Replace the
SiteController
class declaration with this
class SiteController extends \application\components\foo\Controller
As you will see, your new web app still working fine and application
path alias will point properly at protected
folder.
You can find more about php namespaces here
Enjoy coding :>
--------
果然,这年头,英文版的资料比中文版多多了,手册上也是,不过PHP手册是一定要带评论,对于我们这些初学者来说,那是相当的有用啊