Heim  >  Artikel  >  Backend-Entwicklung  >  Was bedeutet Merkmal in PHP? Eine kurze Einführung in Merkmale in PHP

Was bedeutet Merkmal in PHP? Eine kurze Einführung in Merkmale in PHP

不言
不言Original
2018-09-14 16:46:026754Durchsuche

Der Inhalt dieses Artikels befasst sich mit den Merkmalen in PHP. Eine kurze Einführung in Merkmale in PHP hat einen gewissen Referenzwert. Freunde in Not können darauf zurückgreifen.

Was bedeutet Merkmal in PHP? Eine kurze Einführung in Merkmale in PHP

Was ist ein Merkmal?

Sehen Sie sich die Einführung der offiziellen PHP-Website an.

Seit PHP 5.4.0 implementiert PHP eine Code-Wiederverwendungsmethode namens Traits.

Trait ist ein Code-Wiederverwendungsmechanismus, der für Sprachen mit einfacher Vererbung 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 der Zusammensetzung von Merkmalen und Klassen definiert eine Möglichkeit, die Komplexität zu reduzieren und die typischen Probleme zu vermeiden, die mit herkömmlicher Mehrfachvererbung und Mixin-Klassen verbunden sind.

Eigenschaften ähneln Klassen, sind jedoch nur darauf ausgelegt, Funktionalität auf feinkörnige und konsistente Weise zu kombinieren. Kann nicht durch das Merkmal selbst instanziiert werden. Es fügt der herkömmlichen Vererbung eine Kombination horizontaler Funktionen hinzu; das heißt, es ist keine Vererbung zwischen mehreren Klassen in einer Anwendung erforderlich.

Beispiel 1

Sowohl Mobiltelefone als auch Autos verfügen über GPS-Funktionen. GPS wird zur Positionierung verwendet, daher sollten die Funktionen vereinheitlicht werden. Mobiltelefone und Autos haben außer der GPS-Funktionalität grundsätzlich nichts gemeinsam, sodass die Vererbung nicht genutzt werden kann. Was die Schnittstelle betrifft, denke ich, dass die Implementierung der Schnittstelle unterschiedlich sein kann, wenn verschiedene Klassen die Schnittstelle implementieren, aber die Funktion von GPS dient der Positionierung. Verwenden Sie also Trait anstelle von Klasse und Schnittstelle. Das ist mein Verständnis, ich weiß nicht, ob es richtig ist.

Gps.php-Definition:

<?php

trait Gps {
    public function gps() {
        echo &#39;i can gps&#39;;
    }
}

verwendet Trait, um ein GPS-Merkmal zur Wiederverwendung zu definieren, sein Schlüsselwort ist trait . Verweisen Sie dann in car.php und mobile.php darauf.

car.php-Definition:

class Car {
    use gps;

    public function move() {
        echo &#39;i can move&#39;;
    }
}

mobile.php-Definition:

<?php

class Mobile {
    use gps;
    public function tel() {
        echo &#39;i can tel&#39;;
    }
}

Verwenden Sie in car.php und mobile.php das Schlüsselwort use, um das GPS-Merkmal einzuführen, damit Die Methode gps() kann im Auto und auf Mobilgeräten aufgerufen werden.

test.php zum Testen:

<?php
require_once(&#39;gps.php&#39;);
require_once(&#39;car.php&#39;);
require_once(&#39;mobile.php&#39;);
$car = new Car();
$mobile = new Mobile();
$car->gps();
echo "\n";
$mobile->gps();

Die Ausgabeergebnisse lauten wie folgt:

1 i can gps
2 i can gps

Beispiel 2

Ein weiteres eingeführt in Auto Ein im Inland hergestelltes GPS.

gpschina.php ist wie folgt definiert:

<?php

trait GpsChina {

    public function gps() {
        echo &#39;i can chinae gps&#39;;
    }
}

In Auto eingeführt, ändern Sie die Definition von car.php wie folgt:

<?php
class Car {
    use gps, gpschina;    
    public function move() {
        echo &#39;i can move&#39;;
    }
}

Rufen Sie test.php erneut zum Testen auf, und dann wird der Fehler wie folgt gemeldet:

1 Fatal error: Trait method gps has not been applied, because there are collisions with other trait methods on Car in Car.php on line 4

Da in den eingeführten Merkmalen gps und gpschina jeweils ein GPS haben und es bei direkter Verwendung von $car->gps() unmöglich ist, dies zu bestimmen Welche gps()-Methode von gps wird verwendet, es wird immer noch die gps()-Methode von gpschina verwendet, daher wurde ein Fehler gemeldet. In diesem Fall müssen wir einen identifizieren. Ändern Sie die Datei car.php.

<?php

class Car {
    use gps, gpschina {
        GpsChina::gps insteadof Gps;
    }
    
    public function move() {
        echo &#39;i can move&#39;;
    }
}

Auf diese Weise wird die GpsChina::gps-Methode verwendet, um die Gps-Methode zu ersetzen. Rufen Sie test.php auf, um zu überprüfen.

1 i can chinae gps
2 i can gps

Auf diese Weise wird die gps()-Methode in gpschina nach $car->gps() aufgerufen.

Beispiel 3

Was ist, wenn es in der Car-Klasse selbst eine gps()-Methode gibt? Ändern Sie die Car-Klasse.

<?php

class Car {
    use gps, gpschina {
        GpsChina::gps insteadof Gps;
    }
    
    public function gps() {
        echo &#39;car::gps&#39;;
    }
    

    public function move() {
        echo &#39;i can move&#39;;
    }
}

Rufen Sie test.php auf, um die Ergebnisse anzuzeigen:

1 car::gps
2 i can gps

Es ist ersichtlich, dass die gps()-Methode der Car-Klasse selbst aufgerufen wird.

Wenn in einer Klasse die von der übergeordneten Klasse geerbte Methode, die Methode zur Einführung des Merkmals und die Methode der Klasse selbst denselben Namen haben, wird zuerst die Methode der eigenen Klasse aufgerufen Es gibt keine Methode der eigenen Klasse. Die zum Einführen des Merkmals verwendete Methode wird als Methode bezeichnet. Wenn die ersten beiden nicht verfügbar sind, wird die von der übergeordneten Klasse geerbte Methode aufgerufen.

Verwandte Empfehlungen:

Was bedeutet Trait in PHP?

Was ist eine Eigenschaft? Teilen der Deklarations- und Verwendungsfähigkeiten von Trait in PHP

Das obige ist der detaillierte Inhalt vonWas bedeutet Merkmal in PHP? Eine kurze Einführung in Merkmale 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