首页 > 关于命名空间

关于命名空间

看这段代码,关于PHP命名空间的用法,这里:

class TimestampBehavior extends AttributeBehavior

这里继承了AttributeBehavior这个类,但是前面命名空间并没有use yii\behaviors\AttributeBehavior;

请问如果一个类继承的类是同一个namespace中的,是否就不用use引入呢?


这个与 PHP 对 “命名空间解析规则”有关,请参考:名称解析规则,其中的第 3 点和第 6 点能够给你答案。

当前文件的命名空间是 yii\behaviors,那么该文件中“非完全限定名称”的类都将会被认为是该命名空间下的类。比如这里的父类 AttributeBehavior 会被认为是 yii\behaviors\AttributeBehavior,所以不需要使用 use 关键字显式导入该类。而不属于当前命名空间的类,使用时必须显式声明(使用 use 或者 完全限定名称),比如 yii\db\Expression。这个与继承无关,所以要搞清楚。

use 关键字的理解上是有问题的,它只是声明而并不是真正的导入该类,只有当该类被使用时,才会真正引入(require)该类。yii 是有自动加载模块的,这个不需要自己关心,只要命名空间声明正确就可以了。

注:“完全限定名称”说白了就是该类的完整的命名空间+类名。


这个跟命名空间没多大关系,其实是框架自动加载,能够extends类,这个类肯定要先引入

【热门文章】
【热门文章】