PHP命名空间

编程 · 2023-11-15 · 206 人浏览

基本使用

默认情况下常量、类和函数名都放在全局空间下。命名空间通过namespace来声明,必须定义在文件头部,并在declare(strict_types=1) 语句下面。

文件a.php

<?php
namespace A;
function test() {
    echo 'test-A';
}

文件b.php

<?php
namespace B;
function test() {
    echo 'test-B';
}

文件index.php

<?php
include 'a.php';
include 'b.php';
A\test();
B\test();

引入方式

非限定名称

调用类时没有指定命名空间时,将使用当前命名空间。

限定名称

类似于文件系统中的相对路径。

文件a.php

<?php
namespace A\B;
class Test {
    public static function test() {
        echo __METHOD__;
    }
}

文件b.php

<?php
namespace A;
include 'a.php';
class Test {
    public static function test() {
        echo __METHOD__;
    }
}

Test::test(); // A\Test::test
B\Test::test(); // A\B\Test::test

完全限定名称

类似于文件系统中的绝对路径。

文件a.php

<?php
namespace A;
class Test {
    public static function test() {
        echo 'test-' . __METHOD__;
    }
}

文件b.php

<?php
namespace B;
include 'a.php';
class Test {
    public static function test() {
        echo 'test-' . __METHOD__;
    }
}

Test::test(); // test-B\Test::test
\A\Test::test(); // test-A\Test::test

别名引入

通过操作符use来为类或命名空间使用别名。

文件a.php

<?php
namespace A\B\C;
class Test {
    public static function test() {
        echo 'test-' . __METHOD__;
    }
}

文件b.php

<?php
namespace A;
use A\B\C\Test;
use A\B\C\Test as Testa;
include 'a.php';
Test::test(); // test-A\B\C\Test::test
Testa::test(); // test-A\B\C\Test::test

Composer

是PHP 5.3以上的一个依赖管理工具,官网:https://getcomposer.org/

安装

下载并运行Composer-Setup.exe,它将安装最新版本的Composer,并设置好系统环境变量,可在任何目录下直接使用composer命令。

配置中国镜像

修改composer全局配置文件,打开命令行窗口并执行命令:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

如果需要解除镜像并恢复到packagist官方源,执行命令:composer config -g --unset repos.packagist

项目初始化

执行命令:composer init,可一直回车下去。

修改配置

修改composer.json配置文件,其中autoload配置项是自动加载设置。

  • files:自动加载文件列表,适合于加载函数
  • psr-4:自动加载命名空间与目录对应关系

修改过配置文件需要执行:composer update

配置

在项目中使用以下代码即可完成自动加载。

include 'vendor/autoload.php';
PHP
Theme Jasmine by Kent Liao