Blogger Information
Blog 28
fans 0
comment 0
visits 19646
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
1010 分级命名空间自动加载,trait类
没有人的夏天的博客
Original
736 people have browsed it

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元

运行实例 »

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



Correction status:qualified

Teacher's comments:trait的案例太简单了
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post