Recentemente mi sono imbattuto in una classe che utilizza l'istruzione use
all'interno della definizione della classe.PHP: 'uso' all'interno della definizione della classe
Qualcuno potrebbe spiegare che cosa fa esattamente, in quanto non riesco a trovare alcuna informazione al riguardo.
Capisco che potrebbe essere un modo per spostarlo lontano da un ambito globale del file specificato, ma forse consente alla classe data di ereditare da più classi padre - dal momento che extends
consente solo un riferimento di classe genitore?
L'esempio che ho visto era nel modello utente 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 in realtà utilizzando metodi inclusi all'interno della classe UserTrait
- da qui il mio sospetto, ma mi piacerebbe davvero saperne di più sul significato delle dichiarazioni allegate allo use
.
PHP documentation dice:
La parola chiave utilizzo deve essere dichiarato nel l'ambito più esterno di un file (la portata globale) o all'interno di dichiarazioni di namespace. Ciò è dovuto al fatto che l'importazione di viene eseguita in fase di compilazione e non in fase di runtime, pertanto non può essere impostata su blocco . L'esempio seguente mostra un uso illegale della parola chiave uso:
seguita con l'esempio:
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
che indicano che si tratta di un uso non corretto della parola chiave use
- qualche indizio?
Se può facilmente essere risolta poi mi punto a quell'esempio -non basta downvotare senza in realtà dare la risposta! –
http://php.net/manual/en/language.oop5.traits.php – GordonM
Quindi questo è esattamente quello che pensavo, l'ereditarietà multipla: "Un tratto è inteso a ridurre alcune limitazioni dell'ereditarietà singola consentendo a uno sviluppatore di riutilizzare i set di metodi liberamente in diverse classi indipendenti che vivono in diverse gerarchie di classi '. - Era davvero così difficile? - oh - e grazie per il link! –