博主信息
博文 34
粉丝 0
评论 0
访问量 39344
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
匿名对象与匿名类的实现过程+Trait类的声明与工作原理+类的自动加载函数的写法+对象的序列化与反序列化的原理与应用+对面向对象编程的基本理解
Belifforz的博客
原创
821人浏览过

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

实例

<?php

class OnePiece
{
    private $name = '蒙奇D路飞';
    public function story($dream)
    {
        return $this->name . '是一位励志成为'.$dream.'的人';
    }
    
}

//匿名对象:
echo (new OnePiece)->story('海贼王'),'<br>';


//匿名类:
//不需要类名,直接new匿名类出来对象然后直接调用匿名类的方法
echo (new class 
{
    private $name = '蒙奇D路飞';
    public function story($dream)
    {
        return $this->name . '是一位励志要成为'.$dream.'的人';
    }
    
})->story('航海王'),'<br>';


//1.匿名类中可以使用构造方法
echo (new class('罗罗诺亚.索隆') {
    private $name = '';
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function story($dream)
    {
        return $this->name . '励志要成为'.$dream;
    }
    
})->story('世界第一大剑豪'),'<br>';

//2.在匿名类中可以继承其他类中的成员

class Ability
{
    protected $kill;
    public function __construct($art = '')
    {
        $this->kill = $art;
    }

    public function show()
    {
        return $this ->kill ? :'千八百风';
    }
}

echo (new class('罗罗诺亚.索隆','一刀流.三十六烦恼风') extends Ability {
    private $name = '';
    public function __construct($name,$art = '')
    {
        parent::__construct($art);
        $this->name = $name;
    }
    public function story($dream)
    {
        return $this->name . '励志要成为'.$dream;
    }
    public function show()
    {
        return $this->name . '的招式:'.$this ->kill;
    }
    
})->show(),'<br>';

//类中嵌套匿名类
class Goods
{
    public $name = 'IPhone XS';
    private $color = 'blank';
    public function sale()
    {
        //可以把私有属性当作参数传入匿名类,然后构造函数接收
        return (new class($this->color) extends Goods
        {
            private $color = '';
            public function __construct($name){
                $this->color = $name;
            }
            public function date()
            {
                return "苹果新品发布会在9月13日召开,".$this->name."开售预计在10月中旬!敬请期待".$this->color;
            }
        });
    }
}

echo (new Goods())->sale()->date();

运行实例 »

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


2Trait类的声明与工作原理

实例

<?php
/**
 * Trait
 * 1.php只能实现单继承,trait 打破了这限制
 * 2.是代码复用机制
 * 3 是类的语法 单不是类,不能实例 相当于方法集
 */

if(!class_exists('Human')){
    class Human
    {
        protected $name;
        public function __construct($name = '张三')
        {
            $this->name = $name;
        }

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

//trait
trait Course
{
    public $bro = '李四';
    public function sport($name = '玩游戏')
    {
        return $this->name . '正在练习'.$name;
    }
    public function study($name = 'html')
    {
        return $this->name . '在学习'.$name;
    }

}trait OtherCourse
{
    public $bro = '李四';
    public function study($name = 'html')
    {
        return $this->name . '在学习'.$name;
    }

}

class Student extends Human
{
//    use Course;//导入trait类,类似继承
    //如果导入两个trait,里面相同的方法如果重复,要给定规则:
    use Course,OtherCourse{
        Course::study insteadof OtherCourse;//设置使用Course里面的方法,而不是OtherCourse里面的
        OtherCourse::study as MySport;//把OtherCourse里面的方法给 别名
    }

}

$student = new Student();

echo $student->study('Trait'),'<hr>';
echo $student->sport(),'<hr>';
echo $student->study(),'<hr>';//返回在学习html.说明 子类>trait>父类
echo $student->Mysport(),'<hr>';

运行实例 »

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


3类的自动加载函数的写法

实例

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


spl_autoload_register(function($className){
    require './class/'.$className.'.php';
    //如存在命名空间:
//    $className = str_replace("\\","/",$className);
//    require './class/'.$className.'.php';
});

echo demo1::CLASS_NAME,'<hr>';
echo demo2::CLASS_NAME,'<hr>';

运行实例 »

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


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

实例

<?php
/**
 * 对象的序列化与反序列化
 */

class demo4
{
    public $name;
    public $email;

    //对象序列化的时候自动调用
    public function goods(){
        echo $this->email;
    }
    public function __sleep()
    {
        return['name','email'];//传入属性名,返回属性值
    }

    //反序列化
    public function __wakeup()
    {
        $this->email;
        $this->goods();
    }
}
$demo = new demo4();
echo serialize($demo),'<hr>';
//返回   O:5:"demo4":1:{s:4:"name";N;}
/*O:  object对象类型
 *5 :  类名字符长度
 *demo4 :类名
*/
/*
 *对象序列化的特点
 *1只保存对象中的属性,不保存方法
 *2 只保存类名,不保存对象名
 */
$obj = serialize($demo);
var_dump(unserialize($obj));

运行实例 »

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


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

关于面向对象编程,即OOP,它是一种编程范式,满足面向对象编程的语言,一般会提供类、 封装、继承等语法和概念来辅助我们进行面向对象编程。
面向对象是基于万物皆对象这个哲学观点. 所谓的面向对象就是将我们的程序模块化, 对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类 里面
面向对象的三大特征 继承,封装,多态

继承:子类可以继承父类,继承父类的属性及方法,使得代码模块化,提高代码复用性

封装:将事物的属性及行为抽象成一个类,代码模块化,提高代码复用性;

多态:为了实现接口重用,是面向对象的最重要的一部分.

批改状态:合格

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