PHP-命名空间

极速动力1年前帮助217

使用场景

大部份情况都须要多个文件才可以业务,这都会出现类名冲突的情况发生,命名空间可以解决这类问题人。

操作系统目录用来将文件管理,它就饰演了命名空间的角色。比如文件foo.txt可以同时在目录/home/Greg和/home/other中存在,但在同一个目录中不能存在两个foo.txt文件。另外,在目录/home/greg外访问foo.txt文件时,我们必须将目录名以及目录分隔符置于文件名之前得到/home/greg/foo.txt。这个原理应用程序设计领域就是命名空间的概念。

基本使用

默认情况下常量、类和函数名都置于全局空间下。命名空间通过来申明。

必须定义在文件腹部,并在(=1)句子下边。

.php

function sum()
{
    return 'helper sum';
}

test.php

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();

子命名空间

PHP命名空间也容许指定层次化的命名空间的名称,如app\方式,通常情况下我们将层次与目录结构匹配

namespace App\Controller;
class Bootstrap
{
    public function make()
    {
        return __METHOD__;
    }
}

引入形式非限定名称

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

下边在使用User时没有指定命名空间将使用当前命名空间。

namespace App;
class User
{
    public function make()
    {
        return __METHOD__;
    }
}
$user = new User;
echo $user->make();

限定名称

限定名称类似于文件系统中的相对路径

Order.php

namespace App\Controller;
class Order
{
    public static function make()
    {
        return __METHOD__;
    }
}

Test.php

namespace App;
include 'Order.php';
class User
{
    public static function make()
    {
        return __METHOD__;
    }
}
echo Controller\Order::make();

使用限定名称调用Order类,系统会使用当前命名空间加上做为Order类的命名空间。

完全限定名称

类似于文件系统中的绝对路径,以下边的代码为例,调用Order类时可以使用以下的完全限定形式。

echo \App\Controller\Order::make();

常量

常量的值是包含当前命名空间名称的字符串。

使用关键字

别称引入

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

基本使用

实例使用的示例目录结构如下:

App
--Controller
	-- Comment.php
	-- User.php
boot.php

boot.php

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();0

假如使用useApp\,在引入User类时方式如下

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();1

别称

在引入多个同名类时会有冲突情况发生,可以通过起别称的方法处理。

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();2

多个引入

可以使用多行use或用冒号分隔多个类(空间)方式处理多个导出的情况。

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();3

使用冒号分隔

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();4

手动加载注册加载

往年的手动加载函数早已在php7.2废弃使用,所以使用r函数完成手动加载处理。

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();5

使用类方式实现

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();6

使用是后盾人建议使用的方法,相关视频早已在上更新,下边详尽介绍使用技巧。

项目初始

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();7

左转里面命令并仍然回车下去

更改配置文件

个性.json配置文件,其中配置项是手动加载设置

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();8

安装与更新

更改配置文件后执行生成,假如更改过配置文件须要执行。

配置

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

namespace Houdunren;
include 'helper.php';
function sum()
{
    return 'houdunren sum';
}
# 使用当前命名空间中的sum
echo sum();
# 使用 helper.php 中的sum
echo \sum();9

以上内容希望帮助到你们,好多PHPer在进阶的时侯总会碰到一些问题和困局,业务代码写多了没有方向感,不晓得该从哪里入手去提高,对此我整理了一些资料,包括但不限于:分布式构架、高可扩充、高性能、高并发服务器性能调优、TP6,,YII2,Redis,、Swoft、Kafka、mysql优化、shell脚本、、微服务nginx等多个知识点中级进阶干货须要的可以免费分享给你们,须要

>>视频、面试文档免费获取">

相关文章

轻蜂加速器使用指南分享

轻蜂加速器是一款多功能的海外加速器,不同于目前市场上的定向加速器,定向加速器只针对某个方面进行加速,比如游戏加速、加速等。轻蜂加速器除了支持外服手游加速,还可以针对海淘网站、海外院校官网、国际办公应用...