Blogger Information
Blog 34
fans 0
comment 1
visits 23410
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类与对象的进阶知识 —2018年9月5日23时45分
感恩的心的博客
Original
527 people have browsed it

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

实例

<?php
/*编程: 匿名对象与匿名类的实现过程;*/

class Animal{
    public $name='dog';
    protected $color='green';
    private $type='哈士奇';
    
    protected function info(){
        return 'Thanks.';
    }
    
    public function demo1(){
        return (new class($this->type)extends Animal{
        private $type;
        
        public function __construct($type) {
            $this->type=$type;
        }
        
        public function demo2(){
            return 'I am method:'.__METHOD__.'<br>';
        }






        });
        
    }
    
    
    
}

echo (new Animal())->demo1()->demo2();

运行实例 »

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


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

实例

<?php
/**
 * Trait 是什么东西?
 * 1. php 只能实现单继承,trait打破了限制
 * 2. trait 是代码复用机制(函数, 类的继承)
 * 3. trait 使的类的语法,但不是类,所以不能实例化
 * 4. triat 相当于方法集
 */

if(!class_exists('Person')){
    class Person{
    protected $name;
    public function __construct($name='颜回') {
        $this->name=$name;
    }
    
    public function study($course='礼教'){
        return $this->name.'学习'.$course.'<br>';
    }
    }
}

trait friend1{
    public $friend1='子贡';
    public function study($course = '春秋'){
        return $this->name . '学习' . $course . '<br>';
    }
}

trait friend2 {

    public $friend2 = '子路';

    public function study($course = '德行') {
        return $this->name . '学习' . $course . '<br>';
    }

}

//父类Person与trait类之间的关系
//trait位于Person与Student之间
class Student extends Person{
use friend1,friend2{
        friend1::study insteadof friend2;
        friend2::study as MySport;
}

}

$student=new Student();
echo $student->study();
echo $student->MySport();

运行实例 »

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


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

实例

<?php
spl_autoload_register(
function ($className){
        require './class/'.$className.'.php';   
        
});

echo Demo1::COMMON_NAME;
echo Demo2::COMMON_NAME;

运行实例 »

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


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

实例

<?php

class Db{
    public $Db=null;
    public $host;
    public $user;
    public $pass;
    
        //构造方法
    public function __construct($host = '127.0.0.1', $user = 'root', $pass = 'root123') {
        $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();
}

}
/**
 * 对象序列化的特点:
 * 1. 只保存对象中的属性,不保存方法
 * 2. 只保存类名,不保存对象名
 */
$obj= new db();
$serObj= serialize($obj);
echo $serObj,'<hr>';
var_dump(unserialize($serObj));

运行实例 »

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


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

引自网络:面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。

面向对象有三大特性,封装、继承和多态。

封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。

继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。

如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之之间的关系式HAS-A。简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。

总结一下,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好的应用多态。


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
Author's latest blog post