核心概念:核心慨念都是自定义一个存储空间。避免类名重复系统无法判断该执行哪一个类或是哪一个函数。 问题? 自定义一个存储空间? 存储数据的空间. 问题? 类名重复系统无法判断该执行哪一个类或是哪一个函数? .我用代码举个例子,演示一下把好吧. 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 代码包括空白符都不能出现在命 名空间的声明之前.