PHP 命名空间是什么意思?我看了帮助文件了,别让我看了

查看:56
本文介绍了PHP 命名空间是什么意思?我看了帮助文件了,别让我看了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。

这个话什么意思?我做实验理解:
非限定名称
就是调用function class $的时候不加任何前缀,

就是调用代码自己所在文件中的 class 或者 $ 或者 function,这样理解对吗?

解决方案

看源码吧

namespace Project\Model; //本文件隶属命名空间Project\Model,如果没有特别说明,以后出现的类名称为该空间下的类,如 User表示\Project\Model\User,Table\User表示\Project\Model\Table\User
use Zend\Table; //调用\Zend\Table这个类,使用该声明之后再调用$table = new Table();时,这个Table是指\Zend\Table
use Project\Model\Table PTable; //调用\Project\Model\Table这个类,并指定别名PTable,当调用$table = new PTable();时,这个PTable是指Project\Model\Table
//在以上代码中属于声明,不需要特别使用\开头说明是绝对路径
class User extends \Project\Model { //User无特别声明,所以该类全名为\Project\Model\User,而\Project\Model因为是反斜杠开头,指\Project\Model这个类(不能写成extends Model,否则会被认为是\Project\Model\Model)
}
class \User extends Table\User { //使用了反斜杠开头,因此该类全名就是\User,后面的User没有斜杠,则是指\Project\Model\Table\User
}

由此可见,对于namespace和use语句,其中的类使用的是全名,而在其它地方必须使用反斜杠开头表示类的全名,否则其全名是 反斜杠 + 当前的namespace + 类名

这篇关于PHP 命名空间是什么意思?我看了帮助文件了,别让我看了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆