博主信息
博文 33
粉丝 0
评论 2
访问量 47643
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
匿名对象,与匿名类实现过程,trait实现,类的自动加载,对象的序列化,与反序列化,抽象类的使用2018/9/5
cxw的博客
原创
1066人浏览过

通过今天的学习,我学会了匿名对象,匿名类的创建和使用,并且知道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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学