博主信息
博文 38
粉丝 1
评论 0
访问量 32641
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Trait,抽象类的声明和继承,序列化和反序列化--2018年09月06日15时00分
一根火柴棒的博客
原创
779人浏览过

1. 编程: 匿名对象与匿名类的实现过程;

2. 编程: Trait类的声明与工作原理;

3. 编程: 类的自动加载函数的写法;

4. 编程: 对象的序列化与反序列化的原理与应用;

实例

<?php

//1. 编程: 匿名对象与匿名类的实现过程;
class BadPerson{
    private $name = '大官人';
    public function story($name)
    {
        return $this->name.'喜欢上了:<span style="color:red">'.$name.'</span>';
    }
}

echo '1. 编程: 匿名对象与匿名类的实现过程;','<br>';

//实例化对象
$badPerson = new BadPerson();
echo $badPerson->story('妹妹'),'<hr>';

// 匿名对象
echo (new BadPerson())->story('绿茶妹妹'),'<hr>';

// 匿名类 php 7 以上才能使用

echo (new class{
    private $name = '西门大官人';
    public function story($name)
    {
        return $this->name.'喜欢上了:<span style="color:gray">'.$name.'</span>';
    }
})->story('嫦娥姐姐'),'<hr>';


//2. 编程: Trait类的声明与工作原理;突破php单继承的限制

class Person{
    protected $name;
    public function __construct($name='xiaoming')
    {
        $this->name = $name;
    }

    public function study($course='php'){
        return $this->name.'在学习:'.$course;
    }

}

//创建一个trait类
trait Couser
{
    public $friend = 'xiaohua';
    public function sport($name='踢足球'){
        return $this->friend.'在学习:'.$name;
    }
}

class Student extends Person{
    //使用 trait类
    use Couser;
}

$student = new Person();
$student1 = new Student();

echo '2. 编程: Trait类的声明与工作原理;突破php单继承的限制:','<br>';
echo $student->study('java'),'<hr>';
echo $student1->sport('paython'),'<hr>';


//3. 编程: 类的自动加载函数的写法;
echo '3. 编程: 类的自动加载函数的写法:','<br>';

spl_autoload_register(function($className){
    //自动加载函数
    require './class/'.$className.'.php';
});


//echo Demo2::CLASS_NAME,'<hr>';
//echo Demo2::CLASS_NAME,'<hr>';
echo '<hr>';

//4. 编程: 对象的序列化与反序列化的原理与应用;
echo '4. 编程: 对象的序列化与反序列化的原理与应用','<br>';

$num = 500;
echo serialize($num),'<hr>';

$name = 'jack';
echo serialize($name),'<hr>';

$arr = ['bb',13,'worryad',[85,'kick']];
echo serialize($arr),'<hr>';


class Db
{
    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();
    }

    //连接函数
    public 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 Db();

//序列化对象
echo serialize($obj),'<hr>';
$tmp = serialize($obj);
//反序列化
echo var_dump(unserialize($tmp)),'<hr>';

运行实例 »

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

5. 问答:谈谈你对面向对象编程的基本理解:

面向对象编程,我们可以把任何一种物体或者具有相同公共属性的东西称作为类,我们为其创建一个类,称作为父类,然后这种类型的东西,又分布着多种不同的类型,比如:"动物"是一个很广泛的类,我们可以把"脚"这个属性,作为动物类的一个属性,然而动物也分鸟类动物和陆行动物,这时我们就可以再创建这2个类"鸟类动物"类和"陆行动物"类,然后分别继承于"动物"这个类,这就是所谓类的继承.面向对象,我们可以把一些常用的一些功能封装成一个函数,这样就可以复用了,不用每次再重新去写一遍.所有有关于类的函数或者属性,都可以在创建类的时候进行获取和生成,以及做一些限制.

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学