当开发大型项目的时候,可能需要成千上万的文件,面向对象通过命名空间解决这个问题的。PHP命名空间是PHP5.3以后出现的。
命名空间中可以出现:类,函数,常
只有const定义的常量命名空间才有效。命名空间的名字必须符合PHP命名的规则。
命名空间的声明和使用:
<?php输出结果:
namespace China;
const nation = '中国<br>';
function getInfo(){
echo '我是中国人<br>';
}
namespace USA;
const nation = 'USA<br>';
function getInfo(){
echo 'I am a American<br>';
}
echo '<meta charset="utf-8" />';
getInfo(); //非限定名称访问
\China\getInfo(); //完全限定名称访问
I am a American
我是中国人
命名空间多级访问一:
<?php运行结果:
namespace China\beijing\HaiDian;
class Person{
static $name = "李白<br>";
}
namespace USA\Washington;
class Person{
static $name = 'Abraham Lincoln';
}
echo '<meta charset="utf-8">';
echo Person::$name;
echo \China\Beijing\HaiDian\Person::$name;
Abraham Lincoln李白
命名空间多级访问二:
<?php
namespace China\Beijing\HaiDian;
function getInfo(){
echo '这是China\Beijing\HaiDian命名空间';
}
namespace China\Beijing;
function getInfo(){
echo '锄禾日当午';
}
echo '<meta charset="utf-8">';
getInfo(); //非限定名称
HaiDian\getInfo();
空间元素访问的三种形式:
1、非限定名称访问
echo getInfo()
类似于:require (‘getinfo.php’);
2、限定名称访问,是相对限定
China\getInfo();
类似于:require(‘China/getInfo.php’);
3、完全限定访问
\China\getInfo()
类似于:require(‘C:\China\getinfo.php’);
命名空间注意事项
1、最顶层的\表示的是公共空间
2、namespace 必须在最上面
3、命名是虚拟的空间,不是真实存在的目录,当时ThinkPHP的命名空间是真实的地址路径
4、当前文件中具有命名空间的文件,不会改变当前文件的命名空间