Kürzlich bin ich auf eine Klasse gestoßen, die verwendet use
-Anweisung innerhalb der Klassendefinition.
Könnte jemand erklären, was genau es tut – da ich keine Informationen darüber finden kann.
Ich verstehe, dass es eine Möglichkeit sein könnte, es von einem globalen Bereich der angegebenen Datei wegzubewegen, aber erlaubt es vielleicht, dass die angegebene Klasse auch von mehreren übergeordneten Klassen erbt – seit extends
erlaubt nur eine übergeordnete Klassenreferenz?
Das Beispiel, das ich gesehen habe, war im Benutzermodell der ursprünglichen Installation von Laravel:
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table="users";
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
}
und ich habe einige Beispiele für dieses Modell gesehen, die tatsächlich Methoden verwenden, die in enthalten sind UserTrait
Klasse – daher meine Vermutung, würde aber gerne mehr über die Bedeutung von beiliegend erfahren use
Aussagen.
PHP-Dokumentation sagt:
Das Schlüsselwort use muss im äußersten Gültigkeitsbereich einer Datei (dem globalen Gültigkeitsbereich) oder innerhalb von Namespace-Deklarationen deklariert werden. Dies liegt daran, dass der Import zur Kompilierzeit und nicht zur Laufzeit erfolgt, sodass er nicht blockbezogen sein kann. Das folgende Beispiel zeigt eine illegale Verwendung des Schlüsselworts use:
gefolgt von dem Beispiel:
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
was darauf hindeuten würde, dass es sich um eine falsche Verwendung des handelt use
Stichwort – irgendwelche Hinweise?
Wenn es leicht zu beantworten ist, zeigen Sie mich auf dieses Beispiel – stimmen Sie nicht einfach ab, ohne die Antwort tatsächlich zu geben!
– Sebastian Sulinski
27. September 2014 um 9:03 Uhr
php.net/manual/en/language.oop5.traits.php
– GordonM
27. September 2014 um 9:11 Uhr
Das ist genau das, was ich dachte – Mehrfachvererbung – „Ein Merkmal soll einige Einschränkungen der Einfachvererbung verringern, indem es einem Entwickler ermöglicht, Gruppen von Methoden in mehreren unabhängigen Klassen, die in verschiedenen Klassenhierarchien leben, frei wiederzuverwenden.“ – war es wirklich so schwer? – oh – und danke für den link!
– Sebastian Sulinski
27. September 2014 um 9:16 Uhr
Es ist wirklich keine Mehrfachvererbung, es ist näher an Mixins.
– GordonM
27. September 2014 um 9:21 Uhr
Verstanden – obwohl es funktional die Vererbung zusätzlicher Methoden erlaubt – sogar mit dem ähnlichen Überschreibmechanismus.
– Sebastian Sulinski
27. September 2014 um 9:41 Uhr