Home > Backend Development > PHP Tutorial > Instructions for using Trait in php

Instructions for using Trait in php

无忌哥哥
Release: 2023-04-01 21:14:02
Original
1344 people have browsed it

* What is Trait?

* 1. Trait is a code reuse mechanism tailored for single inheritance languages;

* 2. Previously, code could be implemented through functions or classes Reuse;

* 3. Trait can be simply understood as a collection of class methods, working between the parent class and subclass;

* 4. But trait is not limited to methods Collections also support abstraction, static and attributes;

* 5. The current class members will overwrite the trait class members, and the members in the trait can override the class members with the same name

* 6. Important Tip: Trait is not a class and cannot be instantiated. Remember

//Declare the parent class: Person

if (!class_exists('Person')) {
  class Person
    {
        protected $name;
        
        public function __construct($name='小明')
        {
            $this->name = $name;
        }
        
        public function study($course='php')
        {
            return $this->name.'在学习'.$course;
        }
    
        
    }  
}
Copy after login

//Declare the trait class: Course Course

if(!trait_exists('Course')){
    trait Course
    {
        //trait中也可以自己的属性
        public $friend='小华';
        public function sport($name='踢足球')
        {
//            return $this->name.'在学习'.$name;
            //trait中可以访问父类中的属性
            return $this->name.'和'.$this->friend.'在学习'.$name;
        } 
        
        //trait中同样支持抽象,以及静态方法,我放在一起写了
        //我把这个方法声明为抽象的同时,也声明为静态
        abstract public static function hobby($name);
        
        
        //在trait中也声明一个与父类同名的study()方法,参数修改一下以示区别
        public function study($course='java')
        {
            return $this->name.'在学习'.$course;
        }
    }
}
Copy after login


//Declare trait class: Recreation Entertainment

if(!trait_exists('Recreation')){
    trait Recreation
    {
        //这个trait类中也声明一个与Course中同名的方法sport
        //注意: 属性$friend不允许与Course::sport()同名
        //因为目前trait中还没有处理同名属性的机制,期待新版本会解决
        //这里我们将$friend 修改为 $friend1
        public $friend1='小军';
        public function sport($name='打蓝球')
        {
//            return $this->name.'在学习'.$name;
            //trait中可以访问父类中的属性
            return $this->name.'和'.$this->friend1.'在学习'.$name;
        } 
        
        
    }
}
Copy after login

Declare subclass: Student, inherited from parent class: Person

class Student extends Person
{
    //导入trait类
//    use Course;
    
    //子类支持导入多个trait类,但不可避免的会遇到方法重名问题,怎么解决呢?
//    use Course, Recreation;  //同时引入二个trait类
    //如果这二个trait类中有重名方法,要用以下语句结构解决
    use Course, Recreation {
        //访问sport()方法冲突时,使用Course::sport()代替掉Recoreation::sport()
        Course::sport insteadof Recreation;
       
        //再访问Recoreation::sport()时启用别名 mySport()
        Recreation::sport as mySport;
    }
    
    //子类中必须实现trait中声明的抽象方法hobby()
    public static function hobby($name)
    {
        return $name;
    }
    
    //在子类中再声明一个与trait类同名的study()方法,参数修改一下以示区别
    public function study($course='python')
    {
        return $this->name.'在学习'.$course;
    }
    
}
Copy after login


/ /Instantiate the Student class

$student = new Student();
Copy after login

//1. Access the methods in the parent class Person

echo $student->study();
echo &#39;<hr>&#39;;
Copy after login
Copy after login

//2. Access the methods in the trait class

echo $student->sport();
echo &#39;<hr>&#39;;
Copy after login

//3 To call abstract static methods in a trait, you must use Student to access them

echo Student::hobby(&#39;抽烟喝酒烫头&#39;);
echo &#39;<hr>&#39;;
Copy after login

//4. When a trait has a method with the same name as the parent class, the trait priority is higher

echo $student->study();
Copy after login

// 5. When there is a method with the same name as the trait class in a subclass, the subclass has a higher priority

echo $student->study();
echo &#39;<hr>&#39;;
Copy after login
Copy after login

//6. The subclass can obtain method sets from multiple traits

echo $student->sport();
echo &#39;<hr>&#39;;
echo $student->mySport();
Copy after login

The above is the detailed content of Instructions for using Trait in php. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
php data acquisition?
From 1970-01-01 08:00:00
0
0
0
PHP extension intl
From 1970-01-01 08:00:00
0
0
0
How to learn php well
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template