博客列表 >PHP-匿名对象与匿名类的实现过程-0905

PHP-匿名对象与匿名类的实现过程-0905

Bean_sproul
Bean_sproul原创
2018年09月14日 15:59:291447浏览

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

类的三种访问方式


实例

<?php
/**
 * 匿名类:
 * 1. php 7.0+ 才支持
 * 2. 类似于匿名函数,就是没有名称的类
 * 3. 匿名类适合于一次性的创建与引用
 * 4. 匿名类总是与: new 配套使用
 */
class Lei //定义一个类
{
    private $name = '我'; //声明一个私有属性
    public function story($name)  //使用一个方法
    {
        return $this->name.'喜欢: <span style="color:red">'.$name.'</span>';  //返回XX喜欢XX
    }
}

//有三种方式来访问 story方法
//1、实例化一个对象  echo输出
$Lei = new Lei();
echo $Lei->story('篮球').'<hr>';//我喜欢篮球

//2、匿名对象
echo (new Lei())->story('足球').'<hr>';//我喜欢足球

//3、匿名类 只有php 7.0+ 才支持
echo (new class{
    private $name = '我'; //声明一个私有属性
    public function story($name)  //使用一个方法
    {
        return $this->name.'喜欢: <span style="color:red">'.$name.'</span>';  //返回XX喜欢XX
    }
})->story('乒乓球').'<hr>';

运行实例 »

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


匿名类的三种场景


实例

<?php
echo '<h2 style="color: blue">匿名类的三种应用场景</h2>';
echo '<h2>1、匿名类中的构造方法</h2>';
echo (new class('小明'){
    private $name;
    //匿名类中的构造方法
    public function __construct($name){
       $this->name=$name;
    }

    public function story($name){
       return $this->name.'喜欢: <span style="color:red">'.$name.'</span>';
}
})->story('篮球').'<hr>';

echo '<h2>2、在匿名类中可以继承其它类中的成员</h2>';
class Friend{
    protected $girl;
    public function __construct($job='')
    {
        $this->girl = $job;
    }
    public function show()
    {
        return $this->girl ? : '文员';
    }
}
echo (new class('小红','作家') extends Friend{
    private $name;
    public function __construct($name,$job='')
    {
        parent::__construct($job);
        $this->name = $name;
    }

    public function story($name)
    {
        return $this->name.'喜欢上了: <span style="color:red">'.$name.'</span>';
    }
    public function show()
    {
        return $this->name.'的工作是: '.'<span style="color:red">'.parent::show().'</span>';
    }
})->show(). '<hr>';

echo '<h2>3.可以在类声明中嵌套一个匿名类</h2>';
class Anmal   // 宿主类, 父类的角色
{
    public $name = '狗';
    protected $color = '黑色';
    private $type = '哈士奇';

    protected function info ()
    {
        return '市1场售价3000元';
    }
    public function demo1()
    {
        // 宿主类中的私有成员不能在匿名类中直接使用
        // 可以通过在匿名类创建一个构造方法将宿主类中的私有成员进行注入
        // 3. 将宿主类中的私有属性做为匿名类的构造方法的参数传入即可
        return (new class ($this->type) extends Anmal {
            //1. 在匿名类中创建一个属性用来接收宿主类中的私有属性
            private $type;

            //2. 创建一个构造方法
            public function __construct($type)
            {
                $this->type = $type;
            }

            public function demo2()
            {
                return '我是嵌套匿名类中的方法: '. __METHOD__;
            }

            public function show()
            {
                return
                    '动物的名称是: ' .$this->name. '<br>'.//可以访问
                    '动物的颜色是: ' .$this->color. '<br>'.//可以访问
                    '动物的品1种是: ' .$this->type. '<br>';
            }
         });
    }
}

// 访问匿名类中的 demo2()
echo (new Anmal())->demo1()->demo2();

echo '<hr>';

echo (new Anmal())->demo1()->show();

运行实例 »

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


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