PHP面向对象(四):Trait 与匿名类

1、PHP Trait新特性

1:Traits 是一种为类似PHP的单继承语言而准备的代码复用机制

2:Trait 和一个类相似。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

<?php
trait A{
	public $abc="abc";
	public function a(){
		echo 'hello ';
	}
}
trait B{
	public function b(){
		echo 'world ';
	}
}
trait C{
	use A,B;
}

class Test
{	
	use C;
	public function c(){
		echo ($this->abc);
	}
}
$test = new Test();
$test->a();
$test->b();
$test->c();
//打印结果:hello world abc

?>

2、匿名类(PHP7新增)

1:PHP 7 开始支持匿名类。 匿名类很有用,可以创建一次性的简单对象。

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

<?php
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;
});
/*
打印结果:
object(class@anonymous)#1 (1) {
 ["num":"class@anonymous":private]=>
  int(10)
 }
*/
?>

3:匿名类被嵌套进普通 Class 后,不能访问这个外部类(Outer class)的 private(私有)、protected(受保护)方法或者属性。 为了访问外部类(Outer class)protected 属性或方法,匿名类可以 extend(扩展)此外部类。 为了使用外部类(Outer class)的 private 属性,必须通过构造器传进来:

<?php
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
?>

4:声明的同一个匿名类,所创建的对象都是这个类的实例。

<?php
function anonymous_class()
{
    return new class {};
}
//get_class():php内置函数,功能:获取当前类的名称
if (get_class(anonymous_class()) === get_class(anonymous_class())) {
    echo 'same class';
} else {
    echo 'different class';
}
//打印结果:same class

?>

【注】匿名类的名称是通过引擎赋予的,因为实现的细节,不回去依赖这个类名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值