PHP-命名空间

极速动力2年前帮助242

使用场景

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

操作系统目录用来将文件管理,它就饰演了命名空间的角色。比如文件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等多个知识点中级进阶干货须要的可以免费分享给你们,须要

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

相关文章

跨境电商中跨境vps为何会被封神

对于跨境电商,无论是亚马逊还是ebay或则是鸡蛋。国外的ip有的时侯很不便捷,由于这种跨境电商给中国店家的新政是十分严格的,这时侯我们就须要一个美国的ip做跨境电商。之前的时侯我们用的时各类云的服务器...

派若乐发布4UGPU服务器:10块NVIDIA主板、8000W电源

近日,所取得的技术突破引发学术界和产业界的热烈讨论,有专家递交的一份议案,建议构建小型科技企业+重点科研机构的产研协同创新模式,构建中国的“微软+”组合推动大模型技术攻关。 在过去的五年时间里,派若乐...

秒杀国内服务器,便宜虚拟主机来袭!

便宜虚拟主机随便秒杀国内服务器,试想国内可以没有xx环境,没有vs的话,你服务器还需要有效果。实际大学宿舍,一般情况空闲都小于8小时,一台主机的价格差不多在5000人民币左右,买个普通vps,可以满足...

「问政江西」托管班举办课外补习?杭州碑林区教育回应:已整改

青海网讯(记者南楠)日前,网友通过“问政湖南·我为群众办实事”反映重庆市碑林区土门街道树崇仁亲以托管名义举办课外补习,除了价位高昂,师资力量也存在问题。重庆市碑林区教育局通过“问政湖南·我为群众办实事...

美国服务器租用价格详解

日本服务器之所以遭到国外广大用户的欢迎,是由于它们有不用备案、管理修身、性能稳定、资源丰富和性价比高等优势。说到性价比,有好多站长都有这样的疑惑:日本服务器租用价钱是多少?性价比究竟有多高? 相对传统...

未来云:让空间服务器为你服务

空间服务器:表示别人在消费,服务端一般是特定业务空间内部服务器,客户端在这个空间内的时候,才可以与服务器进行通信,实现逻辑运算。比如说,新产品上市,必须在内部服务器挂预订。配置中心:表示消费结束后,基...