Laravel obtenir le modèle de l'attribut: la différence entre les deux méthodes
J'ai trouvé qu'il y a deux façons d'obtenir de l'/afficher un modèle de l'attribut avec Laravel. Je pourrais créer une fonction dans User.php
par exemple:
public function getUsername() {
return $this->username;
}
Puis d'afficher le nom d'utilisateur comme ceci:
{{{ Auth::user()->getUsername() }}}
Ou je pourrait tout simplement faire ceci sans avoir besoin de créer une fonction:
{{{ Auth::user()->username }}}
Quelle est la différence entre ces deux méthodes?
OriginalL'auteur JasonK | 2014-09-25
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de différence. Vous obtenez exactement le même résultat dans ce cas, cette fonction ne sera pas trop utile dans ce cas. Dans le cas ci-dessus, il vous suffit de créé une fonction qui retourne un de champ, mais vous pouvez également créer des fonction qui retourne 2 champs séparés par des virgules:
et puis vous pouvez utiliser
de votre point de vue.
Mais vous pouvez également créer accesseur et des mutateurs pour votre modèle d'attributs à modifier ce que vous définissez/obtenir à partir de votre modèle
OriginalL'auteur Marcin Nabiałek
Lors de l'Utilisation de
$someObject->username
dans ce cas, le__get()
magie méthode renvoie le bien de laattributes
tableau car lausername
propriété n'est pas une propriété publique de l'objet, mais il est stocké (après le remplissage) à l'intérieur de laattributes
tableau et lorsque vous appelez lagetUserName()
méthode personnalisée, la méthode est de retour à la propriété et, indirectement, la même chose se passe. Donc, vous n'avez pas besoin d'utiliser une méthode pour cela.Dans les deux cas, la
__get()
méthode magique est déclenché pour retourner l'article dans les attributs de tableau. Vérifier sur Les Méthodes Magiques surPHP
manuel.Dans certains cas, vous pouvez avoir besoin d'utiliser une dynamique
non-existing
de la propriété, par exemple, si vous avez unfirst_name
etlast_name
domaine de la propriété et vous souhaitez utiliser les deux noms ensemble, comme unfull_name
propriété, alors dans ce cas,Laravel
offre une belle manière de les obtenir. Tout ce que vous devez faire est de qui, de créer une méthode comme:Alors, vous pouvez utiliser
{{ $user->full_name }}
pour obtenir que concaténées valeur.__get()
. Je pense que cegetFullNameAttribute
est appelé par Laravel personnalisé accesseur (laravel.com/docs/5.5/eloquent-mutators#defining-an-accessor).OriginalL'auteur The Alpha
À peu près pas de différence, sauf l'ajout d'une fonction wrapper pour l'obtenir via par l'attribut ajouter les frais généraux d'un appel de fonction, vous n'avez pas besoin (donc minutieusement la diminution de la performance).
Obtenir un attribut (dans votre exemple en faisant juste
$this->username
) finiront de cuire à l'appel de cette fonction dansIlluminate\Database\Eloquent\Model
:Habillage de cet appel de fonction avec votre propre est tout à fait inutile.
OriginalL'auteur Jeff Lambert
Pas de différence, l'un est propriété ou champ de la classe, tandis que d'autres est une méthode de lecture qui renvoie également ce domaine. C'est juste du bon exemple de la programmation orientée objet.
Car elle un objet de modèle vous pouvez appeler tous à ce modèle, des méthodes et des biens, si elles sont publiques et protégées.
OriginalL'auteur Alley Shairu