Blogger Information
Blog 55
fans 0
comment 0
visits 50492
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP-匿名对象与匿名类的实现过程-0905
Bean_sproul
Original
1448 people have browsed it

* 匿名类:
* 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();

运行实例 »

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


Correction status:Uncorrected

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