php命名空间namespace全解

命名空间 namespace

命名空间的分隔符都是反斜杠\
命名空间对函数、类、常量起作用,被称为元素
命名空间的第一个声明之前不能有其他代码
php不允许类、函数重载,使用命名空间即可
命名空间是虚拟的定义空间,不是真实存在的;
例如,同一个页面,
namespace beijing;
function getName(){
return "beijing";
}
echo getName(); //输出结果为beijing 都是获得最近一次的命名空间的函数,叫非限定名称

namespace jiangsu;
function getName(){
return "jiangsu";
}
echo getName(); //输出结果为jiansu 都是获得最近一次的命名空间的函数,叫非限定名称

namespace shenyang;
function getName(){
return "shenyang";
}
echo getName(); //输出结果为shenyang 都是获得最近一次的命名空间的函数,叫非限定名称

同一个页面的多个命名空间的调用:
echo \jiangsu\getName(); //输出结果为 jiangsu ,此种方法叫完全限定名称
echo \shenyang\getName(); //输出结果为 shenyang,此种方法叫完全限定名称



命名空间--子空间使用

namespace beijing\haidian;
function getName(){
return "haidian";
}

namespace hebei\handan;
function getName(){
return "handan";
}
namespace beijing\chaoyang;
function getName(){
return "chaoyang";
}

namespace beijing\changping;
function getName(){
return "changping";
}

echo getName(); //输出结果为changping
echo \beijing\chaoyang\getName(); //输出北京朝阳的元素:函数返回值 changyao
echo \hebei\handan\getName(); //输出河北邯郸的元素:函数返回值 handan

命名空间-导入use

导入:use
如果需要调用的函数或者常量不在当前命名空间,如果当前空间没有指定元素,就要到导入的空间去寻找元素
namespace beijing;
function getName(){
return "beijing";
}
namespace shanghai;
function getName(){
return "shanghai";
}
class Person{
static $name = "shanghairen";
}
namespace nanjing;
function getName(){
return "nanjing";
}


第一种方法:
use shanghai\Person;
echo Person::$name; //现导入Person类所在的命名空间导入过来,如下方式的话,一个引用还好,如果是多个的话,就会比较麻烦,所以,还是一次导入,可以多次使用。
echo \shanghai\Person::$name;

第二种方法:
use shanghai;
echo shanghai\Person::$name; //这种方式还是在引用一次shanghai空间的比较方便,引入多次不方便。


namespace beijing\chaoyang;
class Person{
static $name = "chaoyangren";
}

namespace tianjin\hexi;
function getName(){
return "hexi";
}

class Person{
static $name = "hexiren";
}
echo \beijing\chaoyang\Person::$name; //结果我chaoyangren

use beijing\chaoyang\Person;
echo Person::$name; //结果为chaoyangren,引用空间和元素

use beijing\chaoyang;
echo chaoyang\Person::$name; //结果为chaoyangren,引用空间

use beijing\chaoyang\Person;
echo Person::$name; //引入失败,因为本空间有一个Person,再引入Person的话就会引入失败

use beijing\chaoyang\Person as pon;
echo Person::$name; //引入成功,因为本空间有一个Person,再引入Person的话就会引入失败,如果给引入的元素起个别名就没问题了。


公共空间

如果没有使用namespace,则当前空间就是公共空间

namespace beijing;
include 'common/func.php' //此文件中没有namespace,是公共空间,在namspace文件中可以通过反斜杠\直接访问公共空间的元素
function getName(); { //为beijing空间的函数
return "beijing";
}

function getName();{ //为公共空间的函数
return "common";
}

要访问公共空间的getName
echo \getName(); //表示访问公共空间的元素

当前文件有namespace空间,引入的文件没有namespace,是共公共空间,则在namespace可以通过反斜杠的形式直接访问公共空间的元素,即\getName();
当前文件没有namespace,为公共空间,而引入的文件有namespace,因为当前空间没有namespace,在公共空间访问namespace空间的元素,即beijing\getName();


你可能感兴趣的:(php)