Blogger Information
Blog 38
fans 1
comment 0
visits 26348
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Trait,抽象类的声明和继承,序列化和反序列化--2018年09月06日15时00分
一根火柴棒的博客
Original
649 people have browsed it

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个类"鸟类动物"类和"陆行动物"类,然后分别继承于"动物"这个类,这就是所谓类的继承.面向对象,我们可以把一些常用的一些功能封装成一个函数,这样就可以复用了,不用每次再重新去写一遍.所有有关于类的函数或者属性,都可以在创建类的时候进行获取和生成,以及做一些限制.

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