关于命名空间
看这段代码,关于PHP命名空间的用法,这里:
class TimestampBehavior extends AttributeBehavior
这里继承了AttributeBehavior这个类,但是前面命名空间并没有use yii\behaviors\AttributeBehavior;
请问如果一个类继承的类是同一个namespace中的,是否就不用use引入呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个跟命名空间没多大关系,其实是框架自动加载,能够extends类,这个类肯定要先引入
这个与 PHP 对 “命名空间解析规则”有关,请参考:名称解析规则,其中的第 3 点和第 6 点能够给你答案。
当前文件的命名空间是
yii\behaviors
,那么该文件中“非完全限定名称”的类都将会被认为是该命名空间下的类。比如这里的父类AttributeBehavior
会被认为是yii\behaviors\AttributeBehavior
,所以不需要使用use
关键字显式导入该类。而不属于当前命名空间的类,使用时必须显式声明(使用 use 或者 完全限定名称),比如yii\db\Expression
。这个与继承无关,所以要搞清楚。对
use
关键字的理解上是有问题的,它只是声明而并不是真正的导入该类,只有当该类被使用时,才会真正引入(require)该类。yii 是有自动加载模块的,这个不需要自己关心,只要命名空间声明正确就可以了。注:“完全限定名称”说白了就是该类的完整的命名空间+类名。