Verwendung von Merkmalen
Freigeben: 2016-07-29 09:15:16
Original
1457 Leute haben es durchsucht
Originalquelle: http://blog.csdn.net/longlongmylove/article/details/7521379
php5.4 neue Funktionen Merkmale Einführung1. Merkmale
Traits ist eine neue Methode, die in 5.4 hinzugefügt wurde, um die Wiederverwendung von Code zu erreichen. PHP ist eine einzelne Vererbungssprache. Wir können nicht mehrere Basisklassen in einer Klasse erweitern, um die Wiederverwendung von Code zu erreichen. Jetzt können Traits dieses Problem der Codewiederverwendung lösen, wodurch Entwickler die Wiederverwendung von Code in mehreren verschiedenen Klassen implementieren können.
Die semantische Definition von Merkmalen und Klassen soll die Komplexität des Codes reduzieren und das Problem der Mehrfachvererbung vermeiden. Traits ähneln Klassen, werden jedoch nur verwendet, um eine Reihe von Funktionen auf einheitliche und feinkörnige Weise bereitzustellen. Sie können nicht innerhalb von Traits instanziiert werden, das heißt, es gibt keinen klassenähnlichen Konstruktor __construct(. ). Traits fungiert als Erweiterung der traditionellen PHP-Vererbung und implementiert horizontale Integration; daher ist Vererbung in Anwendungsklassen nicht mehr erforderlich. 1) Wie man
verwendet, um Merkmale mithilfe des Schlüsselworts „use“ in der Klasse zu referenzieren. Mehrere Merkmale werden durch „,“ getrennt. Der Beispielcode lautet wie folgt:
[php] view
Klarschrift
- trait ezcReflectionReturnInfo {
- Funktion getReturnType() {
- }
- Funktion getReturnDescription() {
- }
- }class ezcReflectionMethod extends ReflectionMethod {
- use ezcReflectionReturnInfo;
- /* … */
- }
- Klasse ezcReflectionFunction extends ReflectionFunction {
- /* ... */
- } ?> 🎜>
2) Priorität- Member-Funktionen in der Basisklasse werden überschrieben. Funktionsabdeckung in Traits bedeutet, dass Member-Funktionen in der aktuellen Klasse Funktionen in Traits überschreiben.
- [php] Ansicht
Klarschrift
- Klasse Basis {
- öffentlich Funktion sayHello() {
- echo 'Hallo ';
- }
- }
-
- trait SayWorld {
- public function sayHello() {
- parent::sayHello();
- echo "World!n";
- }
- }
-
- Klasse MyHelloWorld erweitert Basis {
- Verwendung SayWorld;
- }
-
- Klasse MyHelloWorldExt extends Base {
- use SayWorld;
- öffentlich Funktion sayHello() {
- /**
- * Hier sind die neuen Änderungen in 5.4. Versionen vor 5.4 werden zu Folgendem führen:
- * Schwerwiegender PHP-Fehler: String-Offset kann nicht als Array verwendet werden
- * In 5.4 verbessert, um das Zeichen der Indexnummer in der Zeichenfolge zurückzugeben
- */
- $str = "Arvin";
- echo $str[0][0];// echo 'A';
- }
-
- public function shortArray() {
- $array = ['first', 2, 3, 4];//5.4中的数组简单语法
- echo $array[0]; // 5.4
$o- =
neu- MyHelloWorld( );
- $o->sayHello();
$oe- = neu MyHelloWorldExt();
- $oe->sayHello();
echo- "n";
- $oe->shortArray();
- [php] Ansicht
Klarschrift
输出:
Hallo Welt!
- A zuerst
- 3) Mehrere MerkmaleMehrere Merkmale können zur Deklaration einer Klasse hinzugefügt werden, und mehrere Merkmale werden durch "," getrennt.
[php] Ansicht
Klarschrift
- trait Hallo {
- öffentlich Funktion sayHello() {
- echo 'Hallo'; 🎜>
Merkmal Welt { - öffentlich
- Funktion sayWorld() {
- Echo 'Welt';
- Klasse MyHelloWorld { Verwendung
- Hallo Welt;
- }
-
- $o = neu
- MyHelloWorld(); $o
- ->sayHello( );
-
$o
- ->sayWorld(); ?> Ausgabeergebnis:
- 4) Multi-Traits-Konflikt Wenn der gleichen Klasse zwei Merkmale hinzugefügt werden, führen identische Funktionsnamen ohne explizite Verarbeitung zu einem Fehler. Um den Konflikt zwischen zwei Funktionen mit demselben Namen in Tratis in derselben Klasse zu lösen, müssen Sie den Statt-Operator verwenden, um die richtige Funktion auszuwählen. Aufgrund der Einzigartigkeit und Exklusivität von Methoden darf der „as“-Operator nach widersprüchlichen Funktionen verwendet werden, um interne Konflikte zu lösen.
- [php] Ansicht
Klarschrift
- Merkmal A {
- öffentlich Funktion smallTalk() {
- echo 'a';
- }
- öffentlich Funktion bigTalk() {
- echo 'A';
- }
- }
-
- Trait B {
- öffentlich Funktion smallTalk() {
- echo 'b';
- }
- öffentlich Funktion bigTalk() {
- echo 'B';
- }
- }
-
- Klasse Sprecher {
- Verwendung A, B {
- B::smallTalk statt A;
- A::bigTalk statt B;
- }
- }
-
- Klasse Aliased_Talker {
- Verwendung A, B {
- B::smallTalk statt A;
- A::bigTalk statt B;
- B::bigTalk as talk;
- }
- }
- ?>
上面的例子中,Talker使用Traits A. 和B,因此两者中相同的函数名称存在冲突。
alker中定义了smallTalk取自Traits B ,bigTalk取自Traits A.
Aliased_Talker中通过使用as操作符来确保Traits B中的bigTalk通过别名talk来实现.
5)改变函数访问权限
我们可以使用as语法来改变Eigenschaften中函数的访问权限属性.
[php] view
Klarschrift
- trait HelloWorld {
- public function sayHello() {
- echo 'Hallo Welt!';
- }
- }
-
- // Sichtbarkeit von sayHello ändern,改变sayHello的访问权限.
- Klasse MyClass1 {
- verwenden HelloWorld { sayHello als geschützt ; }
- }
-
- // Alias-Methode mit geändert Sichtbarkeit
- // sayHello Sichtbarkeit nicht geändert,设置别名myPrivateHello。
- class MyClass2 {
- use HelloWorld { sayHello als privat myPrivateHello; }
- }
- ?>
6) Eigenschaften bilden neue Eigenschaften
Wie viele Klassen können Eigenschaften in Klassen und Eigenschaften in Eigenschaften verwendet werden. Ein oder mehrere Merkmale können in einem Merkmal definiert werden, und diese Merkmale können in anderen Merkmalen als Teil oder als alle Mitglieder definiert werden.
[php] Ansicht
Klarschrift
- trait Hallo {
- öffentlich Funktion sayHello() {
- echo 'Hallo ';
- } 🎜>
-
- Trait World {
- public
- function sayWorld() { Echo
'Welt!' 🎜>- } >Merkmal HelloWorld { Verwendung
Hallo, Welt - }
-
- Klasse
MyHelloWorld { - verwenden Sie
HelloWorld; - } 🎜>
$o- = neu MyHelloWorld();
- $o ->sayHello(); ();
-
?> Die obige Routine gibt Folgendes aus:
-
[php] view
Klarschrift
-
Hallo Welt! 7) Abstract Trait-Mitglied
, um Um die Implementierung bestimmter Methoden zu erzwingen, können in Traits abstrakte Methoden verwendet werden. - Zum Beispiel: [php] Ansicht
Klarschrift
- trait Hallo {
- public Funktion sayHelloWorld() {
- echo 'Hallo '.$this->getWorld();
- }
- abstrakt öffentlich function getWorld();
- }
-
- Klasse MyHelloWorld {
- privat $world;
- verwenden Hallo;
- public function __construct($world) {
- $this->world = $world;
- }
- öffentliche Funktion getWorld() {
- return $this->world;
- }
- }
-
- /**
- * Hier wird die neue 5.4-Feature-Class-Instanz-Dereferenzierungsoperation verwendet
- * ( new class())->method();
- */
- (neu MyHelloWorld('Arvin'))->sayHelloWorld();
- ?>
-
- 该实例输出:
- Hallo Arvin
8)静态Trait成员在Traits中不能定义static 静态变量,但是可以定义在Tratis的函数中。 Tratis ist einer der Hauptakteure der Welt.
[php] Ansicht
Klarschrift
- trait Counter {
- public function inc() {
- static $c = 0;//静态变量
- $c += 1;
- echo "$c\n";
- }
- /**
- * 静态方法
- */
- public static function doSomething() {
- echo 'Doing something';
- }
- }
-
- class C1 {
- use Counter;
- }
-
- (new C1())->inc(); // echo 1
- C1::doSomething();
- ?>
- 输出为:
- 1
- Doing something
9) Traits 定义属性如果在一个trait中定义了一个属性,则在引用该trait的类中不能定义同名的属性,如果该类中定义有和trait中已定义属性具有相同的名字和访问可见性,则是一个E_STRICT 提示,否则抛出语法错误。<?php
trait PropertiesTrait {
public $x = 1;
public $y = 2;
}
class PropertiesExample {
use PropertiesTrait;
public $x = 1;
//public $y = 3;
}
$example = new PropertiesExample;
echo $example->x, $example->y;
?>
输出:
12
Nach dem Login kopieren
在最后贴上php5.4.0部分新功能changelog:Added short array syntax support ([1,2,3]), see UPGRADING guide for full details.
Added binary numbers format (0b001010).
Added support for Class::{expr}() syntax.
Added support for Traits.//本文的主要内容
Added closure $this support back.
Added array dereferencing support.//数组解引用支持,上文中有实例
Added callable typehint.
Added indirect method call through array. #47160.
Added DTrace support.//传说DTrace是一个性能分析工具,可以跟踪出函数调用点,返回点等数据
Added class member access on instantiation (e.g. (new foo)->bar()) support.//类新实例解引用操作,上文中有实例
Nach dem Login kopieren
本文旨在抛砖引玉,希望大家一起继续探究php5.4的新功能。^_^
以上就介绍了Traits的用法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Erklärung dieser Website
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
Neueste Artikel des Autors
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31