命名空间
命名空间: 解决全局成员的命名冲突问题, 借鉴了文件目录的思想
目录: 同一目录下不允许重名文件, 但不同目录下, 允许同名文件存在
空间: 同一空间内不允许成员重名, 但不同空间内, 允许同名成员存在
解决全局成员的命名冲突问题
function php(){
}
function php(){
}
命名空间使用 "namespace" 关键字声明
namespace one{
function php(){
}
}
namespace two{
function php(){
}
}
namespace three;
function php(){
}
namespace four;
function php(){
}
namespace one{
const NAME = '小红';
$name = '小红';
function php(){
}
class phpcn{
}
}
namespace two{
const NAME = '小刚';
$name = '小刚';
function php(){
}
class phpcn{
}
}
namespace three{
echo $name;
echo NAME;
php();
new phpcn();
}
namespace{
const NAME = '小红';
function php(){
}
class phpcn{
}
}
namespace one{
const NAME = '小刚';
function php(){
}
class phpcn{
}
}
namespace one\two{
const NAME = '小刚';
function php(){
}
class phpcn{
}
}
namespace one\two\three{
const NAME = '小刚';
function php(){
}
class phpcn{
}
}
use
关键字引用命名空间
AS
解决类名过长、重名问题
namespace one;
const NAME = '小红的常量';
function php(){
echo '小红的函数';
}
class phpcn{
public function fun(){
echo '小红的类';
}
}
echo php();
echo '<hr>';
echo \two\php();
echo '<hr>';
echo \one\two\three\php();
echo '<hr>';
use \one\two\three as t;
echo t\php();
echo '<hr>';
namespace two;
const NAME = '小刚的常量';
function php(){
echo '小刚的函数';
}
class phpcn{
public function fun(){
echo '小刚的类';
}
}
namespace one\two\three;
const NAME = '小王的常量';
function php(){
echo '小王的函数';
}
class phpcn{
public function fun(){
echo '小王的类';
}
}
新建目录文件:/one/one.php
<?php
namespace one\one;
const NAME = '小红的常量';
function php(){
echo '小红的函数';
}
class phpcn{
public function fun(){
echo '小红的类';
}
}
新建目录文件:/two/one.php
<?php
namespace two\one;
const NAME = '小刚的常量';
function php(){
echo '小刚的函数';
}
class phpcn{
public function fun(){
echo '小刚的类';
}
}
解决冲突
<?php
require 'one\one.php';
require 'two\one.php';
use one\one as o;
use two\one as t;
$php = new t\phpcn();
$php->fun();
echo '<hr>';
echo o\php();