博客列表 >匿名对象,与匿名类实现过程,trait实现,类的自动加载,对象的序列化,与反序列化,抽象类的使用2018/9/5

匿名对象,与匿名类实现过程,trait实现,类的自动加载,对象的序列化,与反序列化,抽象类的使用2018/9/5

cxw的博客
cxw的博客原创
2018年09月10日 17:33:10875浏览

通过今天的学习,我学会了匿名对象,匿名类的创建和使用,并且知道trait作用和使用,同时懂得了如果创建接口,与抽象类,并且掌握其作用,以下是我的编程代码:

1,匿名对象与匿名类的实现过程

实例

<?php

/**
 *  匿名对象与匿名类的实现过程;
 */
class anonymous
{
    private  $name;
    private  $age;
    public  function  show()
    {
      echo $this->name,"今年:",$this->age;
    }

    public  function  __construct($name,$age)
    {
        $this->name=$name;
        $this->age=$age;
    }
}
//对象实例化
$restult=new anonymous('小红',14);
echo   '对象实例化输出',$restult->show().'<hr>';
//匿名对象
echo  '匿名对象',(new anonymous('小军',33))->show(),'<hr>';
//匿名类使用方法1

echo '匿名类使用方法1',(new class('笑吧',58){
    private  $name;
    private  $age;
    public  function  show()
    {
        echo $this->name,"今年:",$this->age;
    }

    public  function  __construct($name,$age)
    {
        $this->name=$name;
        $this->age=$age;
    }
})->show(),'<hr>';

class  show
{
    public  $name;
    private  $age=600;
    protected  $sex='sex';
    public  function  __construct($name)
    {
        $this->name=$name;
    }
    public  function  show()
    {
        return $this->name;
    }
}
//匿名类使用方法2
echo  '匿名类使用方法2继承类',(new class('小青',22) extends show{

    public  $name='小军';
    protected  $age;

    public function __construct($name)
    {

        parent::__construct($name);
    }

    public  function show($name='')
    {
         return  '姓名'.parent::show();
    }

})->show('小军'),'<hr>';

//匿名类使用方法3

class  student
{
    public  $studentName='爱奇艺';
    protected  $studentAge=30;
    private  $studentSubject='科学';
    private $type = '哈士奇';

    public function getName()
    {
        return $this->studentName;
    }
    //创建一个新的方法包含匿名类
    public function  getInfo()
    {
       return (new class ($this->studentSubject) extends student{
           //定义科目属性
           private  $studentSubject;
         //创建构造方法
           public function  __construct($studentSubject)
           {
               $this->studentSubject=$studentSubject;
           }
          //输出匿名方法
           public  function  demo1()
           {
               return '我是嵌套匿名类中的方法: '. __METHOD__;
           }
           public function show()
           {
               return '我是'.$this->studentName.'今年:'.$this->studentAge.'我擅长的科目是:'.$this->studentSubject;
           }
        });
    }
}
//实例化对象
echo (new student())->getInfo()->demo1().'<hr>';
echo (new student())->getInfo()->show();

运行实例 »

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

2,Trait类的声明与工作原理

实例

<?php
/**
 * trait类 是代码复用机制(函数, 类的继承)
 * 使的类的语法,但不是类,所以不能实例化
 * triat 相当于方法集
 */
class lianxi
{
 protected  $name;
    public  function  __construct($name='小孟')
    {
        return $this->name=$name;
    }
    public  function  study($subject='科学')
    {
           return $this->name.'在学习'.$subject;
    }
}
//单一的继承,如过使用多个继承,则必须使用trait,但是必须通过use导入

trait  info{
    public $s = '小华';
    public function study($name='踢足球')
    {
        return $this->s .'在学习'. $name;
    }
}
trait  info1{
    public $frient = 'ff';
    public function study($name='科学')
    {
        return $this->frient .'在学习'. $name.'<hr>';
    }
}
class  student extends  lianxi
{

    //如果多个trait类中方法名相同,则进行判断
    use info,info1{
        info::study insteadof  info1;
        info1::study as  mysort;
    }
}
//实例化子类,创建子类对象
$student=new student();
echo $student->study();
echo  $student->mysort();
运行实例 »

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

3,类的自动加载函数的写法;

实例

<?php
/**
 *
 * 类的自动加载函数的写法
 *
 */
//include 'pdo/Test.php';
  spl_autoload_register(function ($className){
    require './pdo/'.$className.'.php';
    //存在命名空间的情况下
//    $className = str_replace("\\","/", $className);
//    require './class/'.$className.'.php';
});
//echo Test, '<hr>';
echo  Test::CLASS_NAME,'<hr>';
echo  Test::DIR_NAME,'<hr>';
echo  Test::FILE_NAME,'<hr>';
echo  Test::SERVIER_NAME,'<hr>';
运行实例 »

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

4,对象的序列化与反序列化的原理与应用

实例

<?php
/**
 * 对象的序列化与反序列化的原理与应用
 *
 *
 *
 */
class  seriaze
{
public  $db=null;
    public $host;
    public $user;
    public  $pass;

    //构造方法
    public function  __construct($host='127.0.0.1',$user='root',$pass='root')
    {
$this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->connect();
    }

    private  function  connect()
    {
        $this->db=mysqli_connect($this->host,$this->user,$this->pass);
    }
    //对象序列化的时候自动调用
    public function  __sleep()
    {
        // TODO: Implement __sleep() method.
        return ['host','user','pass'];
    }
    //反序列化
    public function __wakeup()
    {
        // TODO: Implement __wakeup() method.
        $this->connect();
    }
}
$obj=new  seriaze();
echo  serialize($obj).'<hr>';
$tmp=serialize($obj);
var_dump(unserialize($tmp));
运行实例 »

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

以下是手抄图片

O$HPNFL61$EK75C2(C49]IM.jpg



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