2014-09-27 18 views
35

Niedawno natknąłem się na klasę, która używa instrukcji use wewnątrz definicji klasy.PHP: "użyj" wewnątrz definicji klasy

Czy ktoś mógłby wyjaśnić, co dokładnie robi - ponieważ nie mogę znaleźć żadnych informacji na ten temat.

Rozumiem, że może to być sposób na przeniesienie go z globalnego zakresu danego pliku, ale czy to może pozwolić danej klasie dziedziczyć również z wielu klas nadrzędnych - ponieważ extends zezwala tylko na odwołanie do jednej klasy macierzystej?

Przykład widziałem był w modelu użytkownika oryginalnej instalacji 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'); 

} 

i widziałem kilka przykładów tego modelu rzeczywistości z wykorzystaniem metody zawarte w klasie UserTrait - stąd moje podejrzenie, ale naprawdę chciałbym dowiedzieć się więcej na temat znaczenia załączonych oświadczeń use.

PHP documentation mówi:

Zastosowanie kluczowe muszą być zadeklarowane w zakresie peryferyjnego pliku (zakres globalnej ) lub wewnątrz deklaracji przestrzeni nazw. Wynika to z faktu, że importowanie odbywa się w czasie kompilacji, a nie w środowisku wykonawczym, więc nie może mieć zakresu bloków. Poniższy przykład pokaże, nielegalnego wykorzystania kluczowych zastosowanie:

następnie przykładzie:

namespace Languages; 

class Greenlandic 
{ 
    use Languages\Danish; 

    ... 
} 

które wskazywałyby, że jest to błędne użycie słowa kluczowego use - jakieś wskazówki?

+0

Jeśli można go łatwo odpowiedział następnie wskaż mnie do tego przykładu - nie po prostu głosuj bez udzielenia odpowiedzi! –

+0

http://php.net/manual/en/language.oop5.traits.php – GordonM

+0

Tak właśnie uważałem - dziedziczenie wielokrotne - "Cecha ma na celu ograniczenie pewnych ograniczeń pojedynczego dziedziczenia poprzez umożliwienie deweloperowi ponownego wykorzystania zbiorów metod swobodnie w kilku niezależnych klasach żyjących w różnych hierarchiach klasowych. " - czy to było naprawdę trudne? - oh - i dzięki za link! –

Odpowiedz

25

nazywane są cechy, które stosuje się przy użyciu „używać” oświadczenie, w którym jest zawarty w PHP 5 OOP i są pojedyncze Dziedziczenie Więcej informacji Sprawdź następujące

http://php.net/manual/en/language.oop5.traits.php

+1

Przyjmuję tę odpowiedź - choć mówiąc dokładniej - zostały one dodane do php z wersji 5.4. –

Powiązane problemy