博客列表 >面向对象编程拾余+2018年9月6日

面向对象编程拾余+2018年9月6日

Lee的博客
Lee的博客原创
2018年09月06日 16:37:45570浏览

匿名对象与匿名类的实现过程

实例

<?php

/**
 * 匿名类:
 * 1. php 7.0+ 才支持
 * 2. 类似于匿名函数,就是没有名称的类
 * 3. 匿名类适合于一次性的创建与引用
 * 4. 匿名类总是与: new 配套使用
 */

class zaza{
    private $name = '喳喳';
    public function story($name){
        return $this->name.'喜欢吃'.$name;
    }
}
//匿名对象的访问
echo (new zaza())->story('雪糕'),'<hr>';

//匿名类的访问
echo (new class {
    private $name = '喳喳';
    public function story($name){
        return $this->name.'喜欢吃'.$name;
    }
})->story('雪条'),'<br>';

运行实例 »

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


QQ截图20180906143723.png

Trait类的声明与工作原理

实例

<?php
//Trait

class zaza{
    protected $name;
    public function __construct($name='喳喳')
    {
        $this->name = $name;
    }
    public function food($vegetables='青菜'){
        return $this->name.'喜欢吃'.$vegetables;
    }
}

// 创建一个trait特性类
trait vegetables{
    public $friend = '小李';
    public function food($meal = '肉'){
        return $this->name.'喜欢吃'.$meal;
    }
}

trait Recreation{
    public $friends = '小喳喳';
    public function food($name = 'switch'){
        return $this->name.'喜欢玩'.$name;
    }
}
// trait 类位于 Person 与 Student之间
class za extends zaza{
//    use vegetables;  // 导入了一个trait 类
//    use Recreation;

    use vegetables,Recreation{
        vegetables::food insteadof Recreation;
        Recreation::food as Myfood;
    }
}

echo (new zaza())->food(),'<hr>';
echo (new za())->food(),'<hr>';
echo (new za())->Myfood(),'<hr>';

运行实例 »

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

QQ截图20180906143735.png


类的自动加载函数的写法

实例

<?php
/**
 * 类的自动加载
 */

spl_autoload_register(function ($classname){
    require 'class/'.$classname.'.php';
});

echo demo1::Name1,'<hr>';
echo demo2::Name2;

运行实例 »

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

QQ截图20180906143742.png


对象的序列化与反序列化的原理与应用

实例

<?php

/**
 * 对象的序列化
 */

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();
    }
    //数据库连接
    private function connect(){
        $this->db=mysqli_connect($this->host,$this->user,$this->pass);
    }
    //对象序列化的时候自动调用
    public function __sleep()
    {
        return ['host','user','pass'];
    }
    //反序列化:
    public function __wakeup()
    {
        $this->connect();
    }

}

echo serialize((new Db())),'<hr>';

$tem = serialize((new Db()));
var_dump($tem);

/**
 * 对象序列化的特点:
 * 1. 只保存对象中的属性,不保存方法
 * 2. 只保存类名,不保存对象名
 */

运行实例 »

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

QQ截图20180906143749.png


谈谈你对面向对象编程的基本理解

面向对象就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节,面向对象的编程是以对象为中心,以消息为驱动。面向对象有三大特征:封装性、继承性、多态性;1封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式2继承:提高代码复用性;继承是多态的前提3多态是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议