批改状态:合格
老师批语:trait的案例太简单了
1. 命名空间类自动加载
2. trait类
命名空间类自动加载
namespace _101002;
//自动加载函数 函数内的参数 $classname 是带路径的类名
//文件类和类名相同
//空间分层 路径 对应 文件名路径
spl_autoload_register(function ($className){
// 去掉命名空间 名称里的下划线
$path = str_replace('_', '', $className);
// 转义 命名空间名称里的 斜杠为 系统路径符
$path = str_replace('\\', DIRECTORY_SEPARATOR, $path);
// 拼接路径
$path = __DIR__ .'/'. $path . '.php';
echo $path;
if (file_exists($path)) include $path;
});
// 路径对应命名空间路径
echo \_101001\Test1::get(), '<br>';
echo \_101001\_01\Test2::get(), '<br>';
echo \_101001\_01\_02\test3::get(), '<br>';
print_r(\_101001\_01\_02\_03\Test4::get());点击 "运行实例" 按钮查看在线实例
结果 :
F:\phpstudy_pro\www\app.io\PHPtask\1010/101001\Test1.php _101001\test1类, 加载成功
F:\phpstudy_pro\www\app.io\PHPtask\1010/101001\01\Test2.php _101001\_01\test2类, 加载成功

注意:文件名 类名 和路径的一致性
—————————————————————————————————————————————
trait类
//不依赖继承的 引用方法 类 共享类;
// trait类不能定义常量 可以定义属性和方法
// 用trait类 保存加载数据和加载方法 可以实现自动连接 和 加载数据
// 根据参数 自动调用不同的信息
trait mi
{
static private $ui = '信息不存在';
static function mi1($name){
// 字符串 去除空格,str_replace(' ', '', $name)
// 不区分大小写 addslashes;
// 字符串比较;strcasecmp
if (!strcasecmp(addslashes(str_replace(' ', '', $name)),'p30')) {
return $name;
}else if (!strcasecmp(addslashes(str_replace(' ', '', $name)),'p30pro') ) {
return $name;
}else{
// 测试 属性值调用
return self::$ui;
}
}
}
trait mi2{
static function mi2($name){
return $name;
}
}
//向trait类传递参数
class huwei{
use mi,mi2;
private $mi;
private $mi2;
//接收參數 并向屬性賦值
public function __construct($name, $arguments)
{
$this->mi=$name;
$this->mi2=$arguments;
}
//通过属性值向trait类传递参数 动态调用
function merge(){
// 自动返回 trait类的值,实现自动操作
// 判断返回值是否合法 是否是传进行去的值,决定输出内容格式
if (mi::mi1($this->mi) !== $this->mi) {
return mi::mi1($this->mi);
}else{
return mi::mi1($this->mi).mi2::mi2($this->mi2);
}
}
// 静态加载 通过直接传参 静态调用
static function mergesta($name, $arguments){
// 判断返回值是否合法 是否是传进出的值 决定输出内容格式
if (mi::mi1($name) !== $name) {
return mi::mi1($name);
}else{
return mi::mi1($name).mi2::mi2($arguments);
}
}
}
//动态调用 对象传参 直接访问 huwei类内的方法
$merge = new huwei('p0pro',' 4899元');
// 动态输出结果
echo $merge->merge();
// 动态输出:p0pro信息不存在
echo '<hr>';
// 静态调用 直接传参 直接访问 huwei类内的方法
echo huwei::mergesta('P30 PRO',' 4899元');
// 静态输出:P30 PRO 4899元点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号