学科分类
目录
PHP基础

Trait控制权

在类中引入Trait时,可以根据需求来修改Trait中对应方法的控制权,修改方法的控制权后只对当前引入Trait的类有效,修改权限的语法结构如下所示。

 1  trait trait名字
 2  {
 3    protected function 方法名() {}
 4  }
 5  class 类名
 6  {
 7    use trait名字 {
 8      方法名 as 访问修饰限定符;
 9    }
 10 }

从上述语法可以看出,使用as关键字可以修改Trait方法的控制权,但是as关键字也可以对Trait方法设置别名。

接下来演示对Trait方法修改控制权并设置别名,具体代码如下所示。

 1  trait t1
 2  {
 3    public function sleep()
 4    {
 5      echo 'sleep';
 6    }
 7  }
 8  class Person
 9  {
 10   use t1 {
 11     sleep as private s;
 12   }
 13 }
 14 $person = new Person();
 15 $person->s();    // Fatal error: Uncaught Error:Call to private...
 16 $person->sleep();  // sleep

上述代码中,通过在Person类中引入Trait,将sleep()方法设置为私有并重命名为s(),实例化Person类调用s()方法,别名后的s()方法是私有化的,类外不能调用,所以程序运行会报错。第16行调用sleep()方法可以正常输出,别名修改控制权后,只对别名后的方法有效,不会对原有Trait中的方法和访问修饰限定符修改。

点击此处
隐藏目录