PHP
命名空间
- 命名空间: 解决全局成员的命名冲突问题, 借鉴了文件目录的思想
- 目录: 同一目录下不允许重名文件, 但不同目录下, 允许同名文件存在
- 空间: 同一空间内不允许成员重名, 但不同空间内, 允许同名成员存在
一、命名空间
function php(){
}
function php(){
}
二、创建命名空间
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 '欧阳的类';
}
}
六、冲突
<?php
namespace one\one;
const NAME = '灭绝师太的常量';
function php(){
echo '灭绝师太的函数';
}
class phpcn{
public function fun(){
echo '灭绝师太的类';
}
}
<?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();