Mammouth du PHP |
1609 Messages
14 févr. 2021, 18:02
Bonjour beepbeepc,
Alors je dirai que oui, l'idée c'est d'instancier un nouveau user ($user = new User()), d'affecter les valeurs aux propriétés à partir des données du formulaires ($user->setUsername($_POST['username']), etc) puis de donner l'instance du user "hydraté" à la classe UserTable qui sert à faire l'interface entre ta représentation objet du user et la base de données. Il est donc logique que dans le createUser tu fasses appel aux getters de l'objet.
Après pourquoi faire comme ceci ou comme cela, c'est plus une question de comment tu architectures et structures tes classes et ton code. On pourrait dire qu'il y a autant de manières de faire qu'il y a de développeurs bien qu'il y ait tout de même des bonnes pratiques et des mauvaises pratiques.
PS :
Pour compléter, tu pourrais imaginer devoir transmettre toutes les colonnes obligatoires pour pouvoir persister ton utilisateur à son constructeur (new User($username, $password); ou encore new User(['username' => $username, 'password' => $password])). Pas sur que ce soit forcément géniale, à réfléchir. Tu pourrais aussi passer les données au createUser au lieu de lui passer un User. Comme je disais au dessus, y a pas qu'une manière de faire, le tout c'est de bien réfléchir à ce que tu veux faire, de bien définir le rôle de chacune des classes pour éviter de terminer avec un code mal organisé difficile à maintenir et faire évoluer.
Étant donnée que tu as une classe UserTable qui donc en toute logique devrait s'occuper de l'interface entre la représentation objet des données et la table dans la base de données, tu devrais avoir sur ta classe UserTable les méthodes permettant de mettre à jour une ligne, supprimer une ligne et récupérer une ligne. Les méthodes de création, modification et suppression vont en toute logique travailler avec des objets déjà hydratés tandis que la méthode de récupération va elle récupérer les données, créer une instance et l'hydrater pour retourner la représentation objet de la ligne.
Ca ne reste que des conseils, à toi de voir avec quelle structure de code et de classes tu es à l'aise.
Développeur web depuis + de 20 ans