php 匿名类new抽象方法,PHP 新增匿名类

php 新增匿名类

直接上代码:

// PHP 7 之前的代码

class Logger

{

public function log($msg)

{

echo $msg;

}

}

$util->setLogger(new Logger());

// 使用了 PHP 7+ 后的代码

$util->setLogger(new class {

public function log($msg)

{

echo $msg;

}

});

可以传递参数到匿名类的构造器,也可以扩展(extend)其他类、实现接口(implement interface),以及像其他普通的类一样使用 trait:

class SomeClass {}

interface SomeInterface {}

trait SomeTrait {}

var_dump(new class(10) extends SomeClass implements SomeInterface {

private $num;

public function __construct($num)

{

$this->num = $num;

}

use SomeTrait;

});

匿名类被嵌套进普通 Class 后,不能访问这个外部类(Outer class)的 private(私有)、protected(受保护)方法或者属性。

访问外部类(Outer class)protected 属性或方法,匿名类可以 extend(扩展)此外部类。

使用外部类(Outer class)的 private 属性,必须通过构造器传进来:

class Outer

{

private $prop = 1;

protected $prop2 = 2;

protected function func1()

{

return 3;

}

public function func2()

{

return new class($this->prop) extends Outer {

private $prop3;

public function __construct($prop)

{

$this->prop3 = $prop;

}

public function func3()

{

return $this->prop2 + $this->prop3 + $this->func1();

}

};

}

}

echo (new Outer)->func2()->func3();//6

本作品采用《CC 协议》,转载必须注明作者和本文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值