博客列表 >Trait,抽象类的声明和继承,序列化和反序列化--2018年09月06日15时00分

Trait,抽象类的声明和继承,序列化和反序列化--2018年09月06日15时00分

一根火柴棒的博客
一根火柴棒的博客原创
2018年09月06日 14:55:42651浏览

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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议