* 匿名类:
* 1. php 7.0+ 才支持
* 2. 类似于匿名函数,就是没有名称的类
* 3. 匿名类适合于一次性的创建与引用
* 4. 匿名类总是与: new 配套使用
类的三种访问方式
实例
/**
* 匿名类:
* 1. php 7.0+ 才支持
* 2. 类似于匿名函数,就是没有名称的类
* 3. 匿名类适合于一次性的创建与引用
* 4. 匿名类总是与: new 配套使用
*/
class Lei //定义一个类
{
private $name = '我'; //声明一个私有属性
public function story($name) //使用一个方法
{
return $this->name.'喜欢: '.$name.''; //返回XX喜欢XX
}
}
//有三种方式来访问 story方法
//1、实例化一个对象 echo输出
$Lei = new Lei();
echo $Lei->story('篮球').'
';//我喜欢篮球
//2、匿名对象
echo (new Lei())->story('足球').'
';//我喜欢足球
//3、匿名类 只有php 7.0+ 才支持
echo (new class{
private $name = '我'; //声明一个私有属性
public function story($name) //使用一个方法
{
return $this->name.'喜欢: '.$name.''; //返回XX喜欢XX
}
})->story('乒乓球').'
';
运行实例 »
点击 "运行实例" 按钮查看在线实例
匿名类的三种场景
实例
echo '
匿名类的三种应用场景
';echo '
1、匿名类中的构造方法
';echo (new class('小明'){
private $name;
//匿名类中的构造方法
public function __construct($name){
$this->name=$name;
}
public function story($name){
return $this->name.'喜欢: '.$name.'';
}
})->story('篮球').'
';
echo '
2、在匿名类中可以继承其它类中的成员
';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.'喜欢上了: '.$name.'';
}
public function show()
{
return $this->name.'的工作是: '.''.parent::show().'';
}
})->show(). '
';
echo '
3.可以在类声明中嵌套一个匿名类
';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. '
'.//可以访问
'动物的颜色是: ' .$this->color. '
'.//可以访问
'动物的品1种是: ' .$this->type. '
';
}
});
}
}
// 访问匿名类中的 demo2()
echo (new Anmal())->demo1()->demo2();
echo '
';
echo (new Anmal())->demo1()->show();
运行实例 »
点击 "运行实例" 按钮查看在线实例