Heim  >  Artikel  >  Backend-Entwicklung  >  Anweisungen zur Verwendung von Trait in PHP

Anweisungen zur Verwendung von Trait in PHP

无忌哥哥
无忌哥哥Original
2018-06-28 15:17:501249Durchsuche

* Was ist Trait?

* 1. Trait ist ein Code-Wiederverwendungsmechanismus, der auf Sprachen mit einfacher Vererbung zugeschnitten ist.

* 2. Bisher konnte Code durch Wiederverwendung von Funktionen oder Klassen implementiert werden ;

* 3. Trait kann einfach als eine Sammlung von Klassenmethoden verstanden werden, die zwischen übergeordneten Klassen und Unterklassen funktionieren.

* 4. Trait ist nicht auf Methoden beschränkt. Sammlungen unterstützen auch die Abstraktion. statisch und Attribute;

* 5. Die aktuellen Klassenmitglieder überschreiben die Merkmalsklassenmitglieder, und die Mitglieder im Merkmal können die Klassenmitglieder mit demselben Namen überschreiben

* 6. Wichtiger Tipp : Merkmal ist keine Klasse und kann nicht instanziiert werden. Denken Sie daran:

//Deklarieren Sie die übergeordnete Klasse: 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;
        }
    
        
    }  
}

//Deklarieren Sie die Merkmalsklasse: Kurs Kurs

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;
        }
    }
}


//Eigenschaftsklasse deklarieren: Erholung Unterhaltung

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;
        } 
        
        
    }
}

Unterklasse deklarieren: Student, geerbt von der übergeordneten Klasse: 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;
    }
    
}


/ /Instanziieren Sie die Student-Klasse

$student = new Student();

//1. Greifen Sie auf die Methode in der übergeordneten Klasse Person

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

//2 zu 🎜>//3 Um abstrakte statische Methoden in einem Merkmal aufzurufen, müssen Sie Student verwenden, um auf

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

/4 zuzugreifen. Wenn eine Methode mit demselben Namen wie die übergeordnete Klasse in einem Merkmal vorhanden ist, gilt die Priorität des Merkmals sollte höher sein

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

// 5. Wenn es in einer Unterklasse eine Methode mit demselben Namen wie die Merkmalsklasse gibt, hat die Unterklasse eine höhere Priorität

echo $student->study();

///6 Unterklasse kann Methodensätze aus mehreren Merkmalen erhalten

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

Das obige ist der detaillierte Inhalt vonAnweisungen zur Verwendung von Trait in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Schnittstelle in PHPNächster Artikel:Schnittstelle in PHP