一、实例演示: 非限定名称, 限定名称, 完全限定名称
<?php
实例演示: 非限定名称, 限定名称, 完全限定名称,并分析应用场景
// 1. 非限定名称
// 成员前面不能有任何的命名空间,不能有"\", 理解成文件当前路径
// echo Demo::ROAD_NAME;
// 2. 限定名称
// 成员名称前面至少要一个命名空间, 至少要有一个反斜线\, 且不能在首位, 理解成:相对路径
// echo 武汉市\Demo::ROAD_NAME;
// 3. 完全限定名称
// 总是从根空间开始,第一个字符一定是反斜线,根空间, 理解成绝对路径
// echo \湖北省\武汉市\Demo::ROAD_NAME
namespace china\gd;
echo '命名空间:' .__NAMESPACE__.'<br>';
class User1
{
const road = '广州大道';
}
echo '非限定名称:'. User1::road.'<br>';
echo '完全限定名称:'. \china\gd\User1::road.'<br>';
echo '另外一个完全限定名称:'. \gd\jm\User1::road.'<br>';
namespace gd\jm;
echo '另外一个命名空间:' .__NAMESPACE__.'<br>';
class User1
{
const road = '迎宾大道';
}
echo User1::road.'<br>';
echo jm\User1::road;
实例效果:
二、命名空间的别名
<?php
// 命名空间的别名
namespace china_gd_jm;
class U1
{
}
echo \china_zj_xm\U2::index() .'<br>' ;
echo \china_ah_hf\U3::other().'<hr>';
namespace china_zj_xm;
class U2
{
public static function index()
{
return '首页';
}
}
namespace china_ah_hf;
class U3
{
public static function other()
{
return '软件';
}
}
// use 用来声明空间别名,use 默认就是从根空开始
// 空间级的别名
use china_gd_jm as j;
use china_zj_xm as x;
// echo j\U2::index();
// echo x\U3::other();
// 类级的别名
use \china_zj_xm\U2 as U2;
use \china_ah_hf\U3 as U3;
echo U2::index().'<br>';
echo U3::other();
实力效果:
<?php
// 命名空间的别名
namespace china_gd_jm;
class U1
{
}
echo \china_zj_xm\U2::index() .'<br>' ;
echo \china_ah_hf\U3::other().'<hr>';
namespace china_zj_xm;
class U2
{
public static function index()
{
return '首页';
}
}
namespace china_ah_hf;
class U3
{
public static function other()
{
return '软件';
}
}
// use 用来声明空间别名,use 默认就是从根空开始
// 空间级的别名
use china_gd_jm as j;
use china_zj_xm as x;
// echo j\U2::index();
// echo x\U3::other();
// 类级的别名
use \china_zj_xm\U2 as U2;
use \china_ah_hf\U3 as U3;
echo U2::index().'<br>';
echo U3::other();
实例效果
三、类文件的自动加载
<?php
// 类文件的自动加载
echo __DIR__;
echo '<hr>';
$className = 'inc\lib\Demo1';
$path = str_replace('\\',DIRECTORY_SEPARATOR, $className);
echo $path;
echo '<hr>';
$file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
require $file;
use inc\lib\Demo1;
echo Demo1::say();
实例效果
总结:
1.命名空间看似简单,实际做起来,发现限制命名的语句出错: echo jm\User1::road;,不知为何?
非限定命名:当前路径
限定命名:相对路径
完全限定命名:绝对路径
2.命名和类的别名
use 用来声明空间别名,默认就是从根空开始
语法关键词use as
3.类文件自动加载
关键词:require $file;
函数:str_replace($search, $subject, $str);
// DIRECTORY_SEPARATOR : 目录分隔符
函数用处大,要多用。