PHP : utilisation à l'intérieur de la définition de la classe
Récemment je suis tombé sur une classe qui utilise use
déclaration à l'intérieur de la définition de la classe.
Quelqu'un pourrait-il expliquer ce qu'est exactement cela - que je ne trouve aucune information à ce sujet.
Je comprends que ça peut être un moyen de se déplacer, il se forme une portée globale de la donnée de fichier, mais ce n'est peut-être permettre à la classe d'hériter de plusieurs classes parent ainsi - depuis extends
permet uniquement d'un parent de la classe de référence?
L'exemple que j'ai vu était dans le modèle de l'Utilisateur de l'installation d'origine de 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');
}
et j'ai vu quelques exemples de ce modèle se fait à l'aide de méthodes incluses dans la UserTrait
classe - d'où mes doutes, mais aimerait vraiment en savoir plus sur le sens de la ci-joint use
consolidés.
La documentation PHP dit:
L'utilisation des mots clés doit être déclarée à l'extérieur de la portée d'un fichier (le
de portée mondiale) ou à l'intérieur de déclarations d'espace de noms. C'est parce que l'
importation est effectuée au moment de la compilation et non pas de l'exécution, de sorte qu'il ne peut pas être
bloc d'étendue. L'exemple suivant illustre une utilisation illégale de la
utilisation de mots clés:
suivie par l'exemple:
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
qui indique que c'est une utilisation incorrecte de la use
mot-clé - des indices?
- Si il peut facilement être répondu alors le point de moi de cet exemple -ne vous contentez pas downvote sans réellement donner la réponse!
- php.net/manual/en/language.oop5.traits.php
- Et c'est précisément ce que je pensais - l'héritage multiple - 'Un Trait vise à réduire certaines limites de l'héritage simple, en permettant à un développeur de réutilisation des ensembles de méthodes librement dans plusieurs classes indépendantes de vie dans les différentes hiérarchies de classes.' - était-il vraiment si difficile? - oh et merci pour le lien!
- C'est vraiment pas l'héritage multiple, c'est plus proche de mixin.
- Compris - bien que fonctionnellement, il permet à l'héritage de méthodes supplémentaires - même avec la même écraser mécanisme.
Vous devez vous connecter pour publier un commentaire.
Ils sont appelés Traits et sont disponibles depuis PHP 5.4. Ils sont importés dans une autre classe ou de l'espace à l'aide de utilisation mot clé qui est inclus depuis PHP 5.0 comme l'importation d'une classe dans une autre classe. Ils sont l'héritage simple. La principale raison de la mise en œuvre de traits est à cause de la limitation de l'héritage simple.
Pour plus de détails, voir le PHP trait manuel: