匿名类可以创建一次性的简单对象
如下代码所示:
<?php
/*********************匿名函数************************/
$fu = function(){
echo "这是匿名函数";
};
$fu();
echo "<br/>";
class Animal{
public $num;
public function __construct($key){
$this->num = $key;
}
public function getValue($sum):int{
return $this->num+$sum;
}
}
$animal = new Animal(5);
echo $animal->getValue(10);
echo "<br/>";
/****************************匿名类***********************/
echo "这是匿名类<br/>";
echo (new class(5) extends Animal{})->getValue(90);
echo "<br/>";
echo (new class(5) extends Animal{})->getValue(100);
?>
输出如下
匿名类被嵌套进普通类后,不能访问这个 外部类的 私有(private)、受保护(protected)方法或属性。但如果想访问protected方法或属性,可以 继承(extends)这个外部类,想访问这个 私有(private)方法或属性,可以通过构造器,如下代码所示:
<?php
class Animal{
private $num = 1;
protected $age = 2;
protected function bark(){
return 10;
}
public function drive(){
return new class($this->num) extends Animal{
protected $id;
public function __construct($sum){
$this->id = $sum;
}
public function eat(){
return $this->id+$this->age+$this->bark();
}
};
}
}
echo (new Animal)->drive()->eat();
?>
以上代码输出 13
匿名类的闭包实现,如下
$test = array();
for($i=0; $i<6; $i++){
$test[] = new class($i){
public $age;
public function __construct($num){
$this->age = $num;
}
public function getValue(){
return $this->age;
}
};
}
echo $test[0]->getValue();
echo "<br/>";
var_dump($test[2]);
如下显示