statements - php use manual



PHP: 'usa' all'interno della definizione della classe (1)

Recentemente mi sono imbattuto in una classe che utilizza l'istruzione use all'interno della definizione della classe.

Qualcuno potrebbe spiegare cosa fa esattamente - perché non riesco a trovare alcuna informazione al riguardo.

Capisco che potrebbe essere un modo per spostarlo lontano da un ambito globale del file dato, ma forse consente alla classe data di ereditare da più classi genitore - poiché l' extends consente solo un riferimento di classe genitore?

L'esempio che ho visto era nel modello User dell'installazione originale di 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');

}

e ho visto alcuni esempi di questo modello utilizzando effettivamente i metodi inclusi nella classe UserTrait - da qui il mio sospetto, ma mi piacerebbe davvero saperne di più sul significato delle istruzioni use allegato.

La documentazione di PHP dice:

La parola chiave use deve essere dichiarata nell'ambito più esterno di un file (l'ambito globale) o all'interno di dichiarazioni dello spazio dei nomi. Questo perché l'importazione viene eseguita in fase di compilazione e non in fase di runtime, quindi non può essere a scopo di blocco. L'esempio seguente mostrerà un uso illegale della parola chiave use:

seguito dall'esempio:

namespace Languages;

class Greenlandic
{
    use Languages\Danish;

    ...
}

che indicherebbe che si tratta di un uso scorretto della parola chiave use - qualsiasi indizio?


Si chiamano Tratti e sono disponibili da PHP 5.4 . Sono importati in un'altra classe o spazio dei nomi usando la parola chiave use che è inclusa da PHP 5.0 come importare una classe regolare in un'altra classe. Sono eredità singola. La ragione principale per l'implementazione dei tratti è dovuta alla limitazione dell'ereditarietà singola.

Per maggiori dettagli vedi il php.net/manual/en/language.oop5.traits.php :





multiple-inheritance