Bonjour a tous,
Je suis actuellement entrain d'apprendre la POO en php grâce au tutoriel de vyk12.
Mais voila au 3eme chapitre il nous parle d'hydrater ses objets:
Citation : vyk12
Une méthode hydratant un objet consistera à assigner des valeurs aux attributs souhaités. Pour cela, on lui fournit un tableau associatif : la clé est l'attribut et la valeur est celle de l'attribut. Il faut bien penser à contrôler ces valeurs afin que l'utilisateur ne mette pas n'importe quoi : les setters sont là pour nous !
Mais je ne comprend pas cela.
Pouvais vous me donner des informations complémentaires sur ce petit passage si vous plait?
Voici un extrait du cours sur Symfony2 par winzou :
Citation : winzou
Hydrater ? Un terme précis pour dire que le formulaire va remplir les attributs de l'objet avec les valeurs entrées par le visiteur. Faire <?php setPseudo('winzou') ?> et <?php setDate(new \Datetime()) ?>, etc., c'est hydrater l'objet Article.
Le formulaire en lui-même n'a donc comme seul objectif que d'hydrater un objet. Ce n'est qu'une fois l'objet hydraté que vous pourrez en faire ce que vous voudrez : faire une recherche dans le cas d'un objet Recherche, enregistrer en base de données dans le cas de notre objet Article, envoyer un mail dans le cas d'un objet Contact, etc. Le système de formulaire ne s'occupe pas de ce que vous faites de votre objet, il ne fait que l'hydrater.
Une fois que vous avez compris ça, vous avez compris l'essentiel. Le reste n'est que de la syntaxe à connaître.
Pour moi, l'hydration d'un objet sert à assigner des valeurs à tes attributs de ta classe, automatiquement, c'est à dire sans devoir appeler les setters toi-même.
Par exemple :
<?php
class Test
{
protected $titre;
public function __construct($valeurs = array())
{
if(!empty($valeurs))
$this->hydrate($valeurs);
}
public function hydrate($donnees)
{
foreach ($donnees as $attribut => $valeur)
{
$methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
if (is_callable(array($this, $methode)))
{
$this->$methode($valeur);
}
}
}
public function setTitre($titre)
{
$this->titre = $titre;
}
}
$titre = 'Un titre';
$test = new Test($titre);
?>
La ligne suivante :
<?php $test = new Test($titre);
Tu vas créer ton objet, et la valeur de $titre va être assignée à ton attribut $titre automatiquement, grâce à la méthode d'hydratation. Donc, tes attributs seront automatiquement assigné, sans que tu ne doive appeler les méthodes setters toi-même.
Bon, voila je sais pas si je suis très juste, je commence aussi la POO
De rien, pour être sur que tu aies bien compris.
Le code que je t'ai donné en premier lieu revient au même que celui-ci :
<?php
class Test
{
protected $titre;
public function setTitre($titre)
{
$this->titre = $titre;
}
}
$titre = 'Un titre';
$test = new Test;
$test->setTitre($titre);
?>
Mais, avec la méthode d'hydratation, quand tu auras beaucoups plus d'attributs à assigner, ça te fera gagné énormément de ligne de code
salutt!
on initialise nos variables avec un constructeur,des setters, et enfin avec l’hydrations,mais quelle est la différence entre ces trois !!??
merci d'avance
salutt!
on initialise nos variables avec un constructeur,des setters, et enfin avec l’hydrations,mais quelle est la différence entre ces trois !!??
merci d'avance
Ou directement en affectant les propriétés publiques de l'objet...
La différence dépend du contexte, de la nature de l'objet ou du mécanisme que l'on veut coder, le résultat étant le même à savoir modifier son état interne.
Ou directement en affectant les propriétés publiques de l'objet...
La différence dépend du contexte, de la nature de l'objet ou du mécanisme que l'on veut coder, le résultat étant le même à savoir modifier son état interne.
T.
mais je pense que si nos attributs sont privés on peut pas affecter !!! pour reste est ce que tu as une exemple explicatif pour chaque façon de faire
mais je pense que si nos attributs sont privés on peut pas affecter
Personne ne te contraint à protéger systématiquement tes propriétés, surtout pour les objet servant strictement à véhiculer des informations comme ceux issus de la base.
Des exemples o_O, ben ça dépend ce que tu codes...
- Les éléments fournis au constructeur servent à construire l'élément ex: un DSN sur une connexion à la BDD
- Des getters/setters quand l'objet est sensible
- Des méthodes type hydrate, formArray, etc... quand tu veux pour te simplifier la vie remplir plusieurs propriétés à la fois...
J'avoue ne pas bien comprendre l'intérêt de la fonction hydrate dans l'exemple de Link (voire son utilité en général), ne serait-il pas plus simple d'en inclure le code directement dans le construct ?
- Edité par SeanBateman 16 février 2014 à 17:35:49
Dans son exemple (qui n'a pas tout à fait correcte d'ailleurs) il n'a qu'une seule propriété et donc l'utilité d'une méthode "hydrate" est peu utile. C'est bien plus utile quand nos objets ont bien plus d'un attribut a "altérer".
Ensuite, créer une méthode séparée qui est ensuite appelée par le constructeur permet de rappeler cette méthode par la suite sans devoir ré-instancier l'objet pour de nouveau accéder à la méthode (note: bien que je pense qu'on peut appeler manuellement __construct() comme une méthode normal : $objet->__construct() ; à essayer).
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
https://anthonypauwels.be/