php面向对象16篇 命名空间的概述

105 阅读2分钟

核心概念:核心慨念都是自定义一个存储空间。避免类名重复系统无法判断该执行哪一个类或是哪一个函数。
问题?
自定义一个存储空间?
存储数据的空间.
问题?
类名重复系统无法判断该执行哪一个类或是哪一个函数?
.我用代码举个例子,演示一下把好吧.
a.php

<?php
class a{//类a
 public  function  afun()//函数afun
{
    echo "aaaa";
}
}
?>

b.php:

<?php
class a{//类a
 public  function  bfun()//函数bfun
{
    echo "aaaa";
}
}
?>

问题:在c.php中同时调用afun()与bfun()
问题来了,如果同时require文件a,php,b.php那么实例化对象时class a到底是a.php中的还是b.php的?于是为了方便管理类引入了命名空间namespace。

重点来了。

<?php
   namespace ns\a;//定义命名空间
    class a{//类a 
    public  function  afun()//函数afun
    {    echo "aaaa";
    }
    }
 ?>
<?php
namespace ns\b;//定义命名空间
class a{//类a
 public  function  bfun()//函数bfun
{
    echo "aaaa";
}
}
?>

于是在c.php中我们就可以引用上面定义命名空间 怎么引用?这是关键字use就出来了!

<?php
require_once('a.php');//引入文件a.php
require_once('\b.php');//引入文件a.php
use ns\a\a as a;  //使用命名空间ns\a中的类a 并用a替换
use ns\b\a as b;//使用命名空间ns\b中的类a 并用b替换
$a=new a();//实例化a.php 中的类a
$a->afun();
$a=new b();//例化b.php 中的类a
$a->bfun();

命名空间:顾名思义是在一个磁盘cdef…盘的任何一个盘!!!里面!!!,文件夹没有后缀名,同一种类型的文件a.html与文件a.html不能存放在同一个空间下(不能存放),
记住,在同一个空间内不同后缀名的相同文件名可以相同这么没关系的,可以存放),不同类型的在一个空间内能相同。
命名空间用来解决两大问题?
在一个空间下的命名冲突.
这些受命名空间影响?
类(包括抽象类和 traits)、接口、函数和常量。
它必须在其它所有代码之前声明命名空间,除了一个以外:
declare 关键字。
代码演示把:

<?php
namespace     MyProject
{
     const PI=1;
     class people
     {}
     function eat()
{
}
echo "吃饭啦";
}
?>

另一种形式:

<?php
namespace MyProject;
 const PI=1;
     class people
     {}
     function eat()
{
}
echo "吃饭啦";
?>

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式
的declare语句。另外,所有非 PHP 代码包括空白符都不能出现在命
名空间的声明之前.