Blogger Information
Blog 33
fans 0
comment 2
visits 37334
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
匿名对象,与匿名类实现过程,trait实现,类的自动加载,对象的序列化,与反序列化,抽象类的使用2018/9/5
cxw的博客
Original
866 people have browsed it

通过今天的学习,我学会了匿名对象,匿名类的创建和使用,并且知道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



Correction status:qualified

Teacher's comments:
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