美文网首页PHP开发
PHP的namespace命名空间和use操作符讲解与用法

PHP的namespace命名空间和use操作符讲解与用法

作者: hankviv | 来源:发表于2018-04-24 19:52 被阅读0次

首先参照php手册上讲解的:

在PHP中,命名空间用来解决两类问题:
  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突

  • 为很长的标识符名称创建一个别名(或简短)的名称,提高源代码的可读性。

  • PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。


我们先写一个demo:

新建a.php

class Dog{
    function say()
    {
        echo 'this is a dog';
    }
}

新建b.php

class Dog{
    function say()
    {
        echo 'this is b dog';
    }
}

然后新建入口文件index.php

<?php   
require("a.php");
require("b.php");
say();

由于当前a.php和b.php都存在相同的类名Dog,请求index.php会提示:
Fatal error: Cannot declare class Dog, because the name is already in use in D:\www\a\b.php on line 3

对于名字冲突,我们使用namespace改造a.php和b.php
修改a.php,添加

namespace a\b\c;
class Dog{
    function say()
    {
        echo 'this is a dog.';
    }
}

新建b.php

namespace c\d\e;
class Dog{
    function say()
    {
        echo 'this is b dog.';
    }
}

然后运行index.php文件。没有报错;
我们修改index.php,实例化a.php的Dog类:

require("a.php");
require("b.php");

$a = new a\b\c\Dog();
$a->say();
$b = new c\d\e\Dog();
$b->say();

返回: this is a dog. this is b dog.
说明实例化a.php的Dog类成功。
接下来我们使用use操作符来使得代码更加简单易懂:

//使用use操作符,声明类命名空间
use a\b\c\Dog;
require("a.php");
require("b.php");
//原始
$a = new a\b\c\Dog();
$a->say();
//修改后
$a = new Dog();
$a->say();
   

现在就可以简化实例化命名空间。
注意的是,use操作符声明类的时候,命名空间加类名。

现在还有一个问题,如果我们给a.php和b.php都引入的命名空间申明:

use a\b\c\Dog;
use c\d\e\Dog;    

那么运行程序,又会报类重名异常。
这里我们就要使用use命名空间别名设置:

use a\b\c\Dog
use c\d\e\Dog as Dog2

require("a.php");
require("b.php");

$a = new Dog();
$a->say();

$b = new Dog2();
$b->say();   

现在程序就能正常运行了。

总结:

参照PSR-4规范:类的命名空间一般使用文件路径。或参照项目结构来设计。层级的命名空间在多个外部类的实例化和自动加载方面确实做到了规范化。

相关文章

  • PHP的namespace命名空间和use操作符讲解与用法

    首先参照php手册上讲解的: 在PHP中,命名空间用来解决两类问题: 用户编写的代码与PHP内部的类/函数/常量或...

  • PHP命名空间和公共空间

    PHP命名空间 PHP 命名空间(namespace)是在PHP 5.3中加入的。PHP 命名空间可以解决以下两类...

  • PHP-namespace-use用法

    layout: posttitle: "PHP-namespace-use用法"date: 2016-05-18 ...

  • 命名空间 namespace

    /*命名空间:命名空间是一种封装事物的方法命名空间怎么声明?关键字: namespace 导入命名空间: use起...

  • 命名空间

    testNameSpace.php: 命名空间定义文件

  • php初级讲义11-命名空间

    命名空间的概念 命名空间是一种封装事物的方法。 命名空间用namespace关键字来声明。 以PHP或php为名或...

  • C/C++|using的简单总结

    用法一: using namespace 命名空间; 该用法能直接在程序中使用using后所跟的命名空间的元素,而...

  • php namespace use用法简介

    首先看2个php文件,如下: php的namespace和python的import作用是一样的,目的都是把不同文...

  • Yii2 PHP框架--命名空间

    提出问题 解决问题--命名空间的使用 PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C...

  • PHP namespace与use

    一、namespace what is namespace namespace,命名空间,是为了解决项目多人协同开...

网友评论

    本文标题:PHP的namespace命名空间和use操作符讲解与用法

    本文链接:https://www.haomeiwen.com/subject/xjwjlftx.html