博客列表 >1010 分级命名空间自动加载,trait类

1010 分级命名空间自动加载,trait类

没有人的夏天的博客
没有人的夏天的博客原创
2019年10月14日 11:59:49735浏览

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类, 加载成功

TIM截图20191012175809.png

注意:文件名 类名 和路径的一致性


—————————————————————————————————————————————

  • 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元

运行实例 »

点击 "运行实例" 按钮查看在线实例



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议