PHP-命名空间

极速动力1年前帮助173

使用场景

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

操作系统目录用来将文件管理,它就饰演了命名空间的角色。比如文件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做跨境电商。之前的时侯我们用的时各类云的服务器...

游戏防火墙:绑定标识与高防服务器

游戏高防服务器:点击了解详情:3大防火墙技术:(\waf\)4种端口的绑定标识:,,种媒体识别:,,,audio和种类型:html,css,js,excel,pdf4种:get,post,put,种-...

江苏高防服务器推荐

江苏高防服务器,配置这个人可以给你推荐,直接上他家主机配置好不好也是根据你的要求来的,配置也好,速度也快,有需要可以来找我买主机。在专业高防服务器中,总是会给人一种高防服务器价格昂贵的印象,这是一种固...

黑客借助IoT僵尸网路Linux.ProxyM功击游戏服务器、主题资源网站

物联网(IoT)僵尸网路由Web(一家美国防病毒厂商)的安全专家在去年早些时侯发觉,在最新的活动中开始将功击网站作为活动目标。 Linux.是一款Linux恶意软件,它被拿来在受感染的设备上通过SOC...

男子办《传奇》私服非法获利16万盛大怒了

传奇私服屡见不鲜,由于传奇私服判刑的人也不在少数,但仍然有不少人前赴后继的驶向这个无底洞。 据央广网报导,2013年3月起,伍云华以营利为目的,未经盛大公司许可,从网路上非法获取《热血传奇》游戏的源代...

免费升级到企业版,租用联通虚拟主机!

联通虚拟主机租用可以免费升级到企业版,没有优惠费,可以直接向运营商提出申请 不稳定是肯定的,不能100%保证租用的虚拟主机正常跑。租用虚拟主机没优惠只是为了预算不充足而考虑的解决方案,一般iaas价格...