Heim >Backend-Entwicklung >PHP-Problem >Eine eingehende Analyse der PHP-Merkmale

Eine eingehende Analyse der PHP-Merkmale

王林
王林nach vorne
2019-08-20 16:59:242986Durchsuche

Seit PHP5.4.0 hat PHP eine Code-Wiederverwendungsmethode namens trait implementiert.

Wie wir alle wissen, verfügt PHP über eine Einzelvererbung, und Trait ist ein Code-Wiederverwendungsmechanismus, der für Sprachen mit Einzelvererbung wie PHP vorbereitet ist. Merkmale sollen die Einschränkungen von Sprachen mit einfacher Vererbung verringern und Entwicklern die freie Wiederverwendung von Methoden in unabhängigen Klassen innerhalb verschiedener Hierarchien ermöglichen. Die Semantik von Merkmalen und Klassenzusammensetzung definiert einen Weg zur Reduzierung der Komplexität und zur Vermeidung traditioneller Mehrfachvererbungsprobleme.

trait ähnelt class, kombiniert jedoch nur die Funktionalität auf feinkörnige und konsistente Weise. Kann nicht durch das Merkmal selbst instanziiert werden. Es fügt der traditionellen Vererbung eine Kombination horizontaler Funktionen hinzu; das heißt, es ist keine Vererbung zwischen mehreren Klassen in einer Anwendung erforderlich.

Empfohlenes PHP-Video-Tutorial: https://www.php.cn/course/list/29/type/2.html

1 Beispiel

Zuerst geben wir ein Beispiel zur Einführung von Merkmalen, die Klassendefinitionen ähneln, aber mit dem Schlüsselwort trait definiert werden. Nutzen Sie Nutzungskombinationen im Unterricht.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
    public function t2(){
        return &#39;t2&#39;;
    }
}
class Demo{
    use T;
    public function test(){
        return &#39;test&#39;;
    }多个
}
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();

Ausgabeergebnis:

t1

Test

2. Konfliktlösung mit mehreren Merkmalen

Wenn mehrere Merkmale verwendet werden, die Methodennamen jedoch gleich sind, tritt ein Konflikt auf. Sie müssen mithilfe des Schlüsselworts insteadof manuell angeben, welche Merkmalsmethode verwendet werden soll.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();

Ausgabeergebnis:

t1

test

Im Konfliktfall können Sie auch Methodenaliase definieren, um den Konflikt zu lösen Beispiel ist wie folgt:

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
        T2::t1 as new_t1;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->new_t1(),&#39;</br>&#39;;
echo $demo->test();

Ausgabeergebnisse:

t1

t3

test

3. Zugriffsberechtigungen ändern

Sie können auch das Schlüsselwort use verwenden, um die Zugriffsberechtigungen von Methoden zu ändern.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
class Demo{
    use T{
        t2 as protected;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->t2(),&#39;</br>&#39;;
echo $demo->test();

Ausgabeergebnis:

Eine eingehende Analyse der PHP-Merkmale

Das obige Wissen stellt einige häufig verwendete Funktionen vor. Einzelheiten finden Sie im offiziellen Handbuch:

https ://www.php.net/manual/zh/sprache.oop5.traits.php

Weitere Fragen zu PHP finden Sie auf der chinesischen PHP-Website: https:// www.php.cn/

Vielen Dank!

Das obige ist der detaillierte Inhalt vonEine eingehende Analyse der PHP-Merkmale. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen