欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分级的命名空间自动加载类-trait类的理解-2019-10-10作业

程序员文章站 2022-03-20 23:09:57
...

一:分级的命名空间自动加载类

代码图:

分级的命名空间自动加载类-trait类的理解-2019-10-10作业

部分代码:

实例

<?php
namespace _1010;
use _1010\t2\test2;//
use _1010\t3\test3;

spl_autoload_register(function ($className){
    $path = str_replace('_1010'.'\\',DIRECTORY_SEPARATOR,$className);
    $path = str_replace('\t2'.'',DIRECTORY_SEPARATOR,$path);
    $path = str_replace('\t3'.'',DIRECTORY_SEPARATOR,$path);

    $path = __DIR__.'/'.$path.'.php';
//die($path);
    include  $path;
});

echo test1::get();
echo '<br>';
echo test2::get();
echo '<br>';
echo test3::get();

运行实例 »

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

二:trait类的理解

实例

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019\10\15 0015
 * Time: 10:42
 */

class fu
{
    public function a()
    {
        echo '我是父类的a'.'<br>';
    }
    public function b()
    {
        echo '我是父类的b'.'<br>';
    }
    public function c()
    {
        echo '我是父类的c'.'<br>';
    }
}

// 不直接变动父类, 通过 traits 增加新的方法集, 或修改父类方法
trait traits
{
    public function a()
    {
        echo '我是trait的a'.'<br>';
    }
    public function b()
    {
        echo '我是trait的b'.'<br>';
    }

}
//子类
class zi extends fu
{
    // 引入trait类
    use traits;
    public function a()
    {
        echo '我是子类的a'.'<br>';
    }

}

$boj = new zi();
//方法的优先级为 : 子类覆盖 --->trait类覆盖  ---> 父类
$boj->a();
$boj->b();
$boj->c();

运行实例 »

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

总结:

空间自动加载类引入的时候,没有写别名,就使用类名调用

trait类方法的优先级为 : 子类覆盖 --->trait类覆盖  ---> 父类,子类中使用use关键字引入trait类 ,可以解决类单继承的问题