命名空间引用类的三种方式 和 命名冲突解决 与 一个自动加载类
程序员文章站
2022-03-06 13:40:03
...
一.引用类的三种方式:
非限定名称:相对于"当前路径",类名前无“空间前缀”
限定名称:相对于"相对路径",类名前存在“非全局开始的空间前缀”
完全限定名称:相对于"绝对路径",类名前存在“全局开始的空间前缀”
样式代码:
<?php
// 父空间
namespace No1 {
class Hello
{
}
// 1. 非限定名称: Hello, 相当于“当前路径”
echo Hello::class.' 这是非限定', '<br>';
// 2. 限定名称: No2\Hello,相当于“相对路径”
echo No2\Hello::class.' 这是限定', '<br>';
// 3. 完全限定名称: \NON\Hello, 相当于“绝对路径”
echo \NON\Hello::class.' 这是完全限定', '<hr>';
}
// 子空间
namespace No1\No2 {
class User
{
}
}
// 其它空间
namespace NON {
class User
{
}
}
效果预览:
二.别名的引入与冲突的解决:
先创建两个php文件:zy2.php,zy2-1.php
文件zy2.php样式代码:
<?php
// 使用别名的原因有二个: 简化, 重名
namespace Php1;
// 加载它
require 'zy2-1.php';
// 当前空间引用一个与自己无关联的类,需要使用完全限定名称
$user = new \Php2\IndexModel;
var_dump($user);
echo '<br>';
// 导入空间别名,来简化类名称
// use 默认导入就是一个“完全限定名称”
use Php2\IndexModel as Index;
// 别名访问
$index = new index;
var_dump($index);
echo '<br>';
// 如果通过别名导入的类,与当前空间的类命名冲突
class IndexModel
{
}
$user = new IndexModel;
var_dump($user);
echo '<hr>';
文件zy2-1.php样式代码:
<?php
namespace Php2;
class IndexModel
{
// ...
}
效果预览:
三.自动加载类
先创建一个文件zy3.php,在同级创建一个文件夹zdjzq,在zdjzq文件夹中再创建一个models文件夹;
接下来在model文件下新建两个文件:DqkjsModel.php与YinrModels.php;
文件zy3.php样式代码:
<?php
// 自动加载
// 将类空间名称与类文件所在的路径进行映射,实现自动加载
namespace zdjzq;
use zdjzq\models\DqkjsModel;
use zdjzq\models\YinrModels;
// 使用自动加载器
require 'app/loader.php';
$dqkjs = new DqkjsModel;
$yinr = new YinrModels;
var_dump($dqkjs,$yinr);
echo '<hr>';
文件DqkjsModel.php样式代码:
<?php
namespace zdjzq\models;
class DqkjsModel
{
// ...
}
文件YinrModels.php样式代码:
<?php
namespace zdjzq\models;
class YinrModels
{
// ...
}
效果预览:
上一篇: 常用数据库操作指令
下一篇: 【推荐】17个提升用户体验图像特效库