1、什么是命名空间

  所谓的命名空间就是为了解决函数、常量(const定义的常量)以及类的命名冲突问题。

PHP 命名空间20240823更新

  2、使用命名空间解决命名冲突问题

  基本语法:

  namespace(关键词) + 空间名称(虚拟的, 与真实路径没有任何关系, 可以任意定义)

  3、子命名空间

  命名空间是虚拟的, 其定义方式也可以与路径相似, 采用多级结构。

  4、命名空间注意事项

  在实际项目开发中, 第一个命名空间前面不能出现任何其他代码! 谨记!!!

  5、命名空间的访问

  第一种方式:非限定名称访问方式

  遵循的原则:就近原则

  第二种方式:限定名称访问方式(需要使用use引入命名空间)

  特别说明:默认情况下, 使用use方法引入命名空间并不会改变空间路径, 访问的还是就近的命名空间。如何解决以上问题呢?

  答:使用限定名称访问方式

  $对象 = new 命名空间\类名称的形式

  use 也可以引入命名空间+类名

  第三种方式:完全限定名称访问命名空间

  注意:完全限定访问方式必须以"\"方式访问;

  6、使用use导入空间类(ThinkPHP框架导入方式)

  基本语法:

  use 命名空间\类名称;

  特殊情况说明:如果导入的类名称与当前命名空间下的类名称一致, 就会出现名称冲突问题, 这可以使用别名的方式解决:

  示例代码:

  7、公共命名空间

  当我们在一个命名空间下引入一个没有定义命名空间的函数、常量以及类, 我们把这种情况就称之为公用命名空间。

  公共命名空间下的元素访问必须使用完全限定方式。

  8、const和define的区别:

  前者针对命名空间发生影响, 后者不发生影响。

  const可以声明多个同名称的常量

  define对同名称常量只能声明一个

  控制器:

  Admin: 模块

  Controller: 控制器

  Admin\Controller: 代表Admin模块下的控制器

  Think\Controller: 代表Think核心的控制器

  模型:

  Admin: 模块

  Model: 模型

  Admin\Model: 代表Admin模块下的模型

  Think\Model: 代表Think核心的模型

  命名空间下加载文件和实例化类方法

  注意: 在命令空间外使用define()定义的常量是无法使用的, 应当使用const定义常量;

  class_exists()和method_exists()使用

  bool class_exists ( string $class_name [, bool $autoload = true ] )

  检查指定的类是否已定义。

  class_name 类名。名字的匹配是不分区大小写的。

  autoload 是否默认调用 __autoload。

  bool method_exists ( mixed $object , string $method_name )

  检查类的方法是否存在于指定的 object中。

  object 对象示例或者类名。

  method_name 方法名。

  PHP 类名::class含义

  自 PHP 5.5 起, 关键词 class 也可用于类名的解析。

  使用 ClassName::class 可以获取一个字符串, 包含了类 ClassName 的完全限定名称。这对使用了命名空间的类尤其有用。