美文网首页
2020-09-02

2020-09-02

作者: 悟道范 | 来源:发表于2020-09-02 22:49 被阅读0次

星期三,晴天,学习进行中 【全是概念性的东西】

学习内容包含:多重trait与抽象及静态方法的使用,类属性的关键词的控制 ,构造函数和析构函数 ,__SET 和 __GET的使用

多重trait与抽象及静态方法的使用

tait可以被多重继承并且可申明静态方法和抽象方法。

trait Log{
   public function save(){
       return __METHOD__;
   }

}


trait Comment{
     public function user(){
            return __METHOD__;
     }
    public function save(){
        return __METHOD__;
    }
}

trait GetOneName{
    abstract public function getHttp();
    public static function getStaticName(){
        return 'static....name';
    }
    public function getSiteName(){
        return 'www.jiujiu.com';
    }
}

class Site{
    use GetOneName;
    public function save(){
        return __METHOD__;
    }
    public function getHttp()
    {
        // TODO: Implement getHttp() method.
    }
}

class  Tools extends Site{
    use Log,Comment{
        Log::save insteadof Comment;
        Comment::save as protected saveRe;
    }

}

echo  Tools::getStaticName();

本节知识点,基本理论知识点都是能够理解的,运用起来才是难哦

类属性的关键词


trait oss{

    protected function ossfun(){
        return '...ossfun...';
    }

}

class upload {
    use oss;
    public function uploadfile(){
        $show_text = '';
        /*第一步:上傳本地文件*/
        $show_text.=$this->uplocaltion();
        /*第二步:上傳到OSS*/
        $show_text.=$this->ossfun();
        /*第三步:返回圖片路徑*/
        return   $show_text;
    }
    private function uplocaltion(){
        return '...uplocation...';
    }
}

$obj = new  upload();
echo  $obj -> uploadfile();

public:全世界均可使用 private:只有自己可以用 protected:子父均可用。

构造函数和析构函数

class  Code{

    protected  $width;
    public function __construct(int $width = 100)
    {

        $this -> width = $width;

    }

    public function getCode(){
       return '牛逍遥是一个' .$this -> width.'重的妞妞';
    }


    public function __destruct()
    {
        // TODO: Implement __destruct() method.

        echo 'die';
    }
}
$a = new  Code();
echo  $a-> getCode();
echo '<hr/>';
牛逍遥是一个100重的妞妞
die

构造函数和析构函数就是一个生死劫,创造的时候被自动调用,当对象被释放后,直接die掉,可以用作在我之前写的一个上传图片到OSS中很好的使用,上传文件到OSS使用后端上传,需要先传递到后端生成服务器文件,然后再次调用上传到OSS端去,在这里我们在上传OSS成功后就需要做一个处理,把我们上传到本地服务器的图片资源down掉,不然服务器资源越来越多,上传OSS的意义就失去了。

__GET和__SET的使用,并且延伸了 method_exists 和 call_user_func_array的使用上代码,很多都写在了注释里面,不做阐述了

/**
 * Class Query  将数据库模型拆分   1.数据库链接等这些东西 我们就可以抽象出这样的的一个类
 *
 */
abstract class Query{
    //1.模拟数据库链接,好的链接到了。
    //2.那么我们可以将查询数据的需要存储抽象成为一个抽象方法,为了提高解耦性,那么我需要设置当前方法为受保护的方法,
    //那这里的为什么需要抽象一个方法出来,因为你想我数据查询到了,得记录啊,那怎么办,我得将把这个方法抽象出来,然后呢操作就放在
    //继承当前类的子类里面去
    abstract protected function record(array $data);
    //3.走查询的步骤,飞起
    public function select(){
        //假设数据查询到了,那么我就要干嘛,把数据扔出去
        $this -> record(['name' => '张三','mobile' => '1502947774']);
    }
}
/**
 * Class Model  虚拟数据库Model查询
 */
class Model extends Query{
    //首先继承抽象类需要实现抽象类里面的抽象方法
    protected $field = [];
    protected function record(array $data)
    {
        // TODO: Implement record() method.
        $this -> field = $data;
    }

    public function selectAll(){
        $this -> select();
        return $this -> field;
    }

    private function __mobile($name){
        return '我是被二次处理过的手机号码:'.$this -> field[$name];
    }
    //接下里需要说的就是__get的使用
    //我们在查询到数据后,肯定是需要说要获取当前查询的数据中的某一个值的
     public function __get($name)
     {
         // TODO: Implement __get() method.
         //我们可以延伸出一个问题,当我们在调用手机号码的时候,我需要默认去对手机号码处理
         if (method_exists($this,'__'.$name)){
                //存在就去调用当前的这个方法  把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。
             return  call_user_func_array([$this,'__'.$name],[$name]);
         }

         if (isset($this -> field[$name])){
             return $this -> field[$name];
         }else{
            throw new Exception('参数'.$name.'在数据库不存在');
         }
     }

     //__set的使用:如果当前值存在则重新复制,否者直接报参数错误,可以应用到,
    //比如说你查询到一个数据,本身是对象形式的,你需要转换成数组形式,那么__set是很有必要的
    public function __set($name, $value)
    {
        // TODO: Implement __set() method.
        if (isset($this -> field[$name])){
            $this -> field[$name] = $value;
        }else{
            throw new Exception('当前参数'.$name.'消失啦');
        }
    }
}

try{
    $obj  = new Model;
    $obj -> selectAll();
    $obj -> mobile = '1502946677900';
    echo $obj -> mobile;
}catch (Exception $e){
   echo $e -> getMessage();
}

当前参数mobiles消失啦

相关文章

网友评论

      本文标题:2020-09-02

      本文链接:https://www.haomeiwen.com/subject/oqowsktx.html