PHP-命名空间

极速动力1年前帮助189

使用场景

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

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

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

相关文章

服务器是哪些,服务器和笔记本有哪些区别,服务器的操作系统有什么

哪些是服务器 顾名思义就是提供服务的机器,我们平常使用的APP,网页等都须要向前端服务器发送数据,之后在前端的服务器内进行处理,再返回你想要的信息,所以服务器是网路的节点,存储和处理网路上80%的数据...

BAT如何进行技术布阵?

截至2014年,BAT已在中国渡过十几个年头,而其各自技术生态依照自身特征均已有所发展,从技术角度各家到底有何优势,以下做个盘点。 一,百度 百度本身就是以技术为驱动的公司,旗下成功产品都有一个特点就...

简洁高效:慈世堂教你配置Web服务器

web服务器配置_web服务器使用-远景开发者社区-专注于开发者服务器开发与讨论的社区 无服务器,真web服务器,参考、、类 web在国内还是新兴的行业,web服务器容器化方面研究还非常不足,如在业务...

2020年,怎么能够拥有一个个人网站?

现在,个人网站或博客早已成了「小众」的代名词。但在许多年之前,它们以前是人们在互联网上输出内容最主要的途径。虽然微博、等轻量的、简短的、与联通设备密不可分的社交媒体早已成为明天我们网路生活很重要的一部...

高效稳定,畅享动态IP服务

vps动态ip服务器服务商会根据你绑定的adsl,直接下发给你的路由表。路由表是动态的,需要重新配置。重新配置路由就会生成ip池,ip池会随机选择一个ip,供不同vps上。如果新配置了动态ip服务器,...

白帽子黑客与网络安全工程师 : 搭建FTP渗透测试环境技巧

本分享仅做学习交流,请自觉遵循法律法规!搜索:Kali与编程,学习更多网路攻守干货!上篇文章将在今天凌晨五点发布,敬请关注! 1、背景介绍 FTP是拿来在两台计算机之间传输文件,是中应用十分广泛的服务...