Ca serait bien de nous donner les chemins des fichiers pour chaque classe car ce n'est absolument pas évident, l'esprit étant dérouté par les nombreuses classes (on ne sait plus qui fait quoi, ni les liens entre les classes), fichiers et répertoires.
Merci.
- Edité par b0nj0urlem0nde 18 janvier 2018 à 8:30:53
Je suis dans la même situation que pas mal de personnes qui suivent ce cours apparemment...dépité. Je n'ai pas l'habitude de laisser tomber au premier obstacle sur tous les cours que j'ai fait, mais là, arrivé à la fin du cours péniblement, je suis incapable de faire l'activité finale, vraiment. J'ai pourtant réussi pas mal de choses et même développer quelques sites dont un site en php procéduriale avec plus de 700 membres actuellement, mais là j'ai l'impression que je n'ai pas le niveau pour devenir plus pro. Cela me met en grand doute pour la suite, à deux doigts de me dire que je ne suis peut être pas capable de continuer, car la poo est inévitable.
Ne baisse pas les bras, documente toi sur les caches, fait d'autres cours pour te changer les idées pendant que ton cerveau continue à calculer se qu'il faut faire. Quand tu te sens prêt, tu t'y remets. Cela a été difficile pour tout le monde, tu aurais été le seul, tu aurais pu te poser des questions, douter, mais pas là! Prends du recul (j'ai pris 4 mois de recul 🤨), sur le net il y a plein d'approches sur le sujet. Le but étant de sortir un truc qui fonctionne et tu en es capable!
Parmi les 22 pages de ce forum, il y a quelques éléments de réponse.
A+
- Edité par Philippe2463 18 janvier 2018 à 16:13:42
La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!
J'ai commencé le cours sur la POO il y a quelques jours, je suis "à peut prêt" à l'aise avec le PHP en procédurale. Bon, et par rapport à la POO c'est moi qui suit nul, ou qui comprend pas le cours ? Car je trouve ça vraiment compliqué...
Je galère, mais j'en suis qu'au début, au base, et pourtant, y'a pleins de trucs que je n'arrive pas à bien cerner... Je m'amusais bien en procédural !
Du coup, j'ai une question, faut-il OBLIGATOIREMENT connaître la POO, et ne plus jamais programmer en procédurale ? Quel est l’intérêt, car pour moi, c'est juste un truc super dur à apprendre, alors que je peux faire exactement la même chose en procédural, et ça, je sais le faire assez facilement. Je ne parle que pour la POO en PHP... J'ai mieux compris la POO en javascript que là. J'ai surtout l'impression qu'avec ce cours, la POO complique les choses et chamboule TOUT ce que j'ai appris en procédural, comme si ce que j'ai appris avant, je dois tout jeter et repartir de zéro. (bon, en gardant quelques connaissances de base du PHP, c'est sûr ^^)
Si vous avez des conseils à me donner pour mieux comprendre la POO en PHP, je suis preneur, car je ne baisse pas les bras de toute façon merci bien !
J'ai eu exactement les mêmes questionnements que toi. Aujourd'hui, je gère bien la POO mais j'ai encore énormément de mal avec l'architecture MVC. Alors est-ce obligatoire ? Absolument pas. Tu peux tout-à-fait coder un site entier en procédurale, du moment que tu organises bien ton code il n'y a aucun souci. Tu auras des problèmes en revanche pour travailler en équipe, la POO sert surtout à produire des tonnes de code qui sera entièrement réutilisable sans qu'on cherche à comprendre ce qu'il y a dedans, grâce à l'injection de dépendances. Mais pour le programmeur lambda j'ai tendance à penser que cela complique énormément le code et que rien ne vaut du procédurale bien organisé si on veut coder un site pour soi-même, avec cependant quelques classes (par exemple pour une interface membre, une classe abstraite Utilisateur avec des classes filles Membre / Admin et un manager pour récupérer les données en BDD, très pratique). Pour résumer le fond de ma pensée si on code un site pour soi-même je pense qu'il faut les deux mais la POO dans une moindre mesure. En revanche, si on veut coder en équipe ou en faire son métier, la POO est indispensable.
@laplumeaencre
Je te rassure, on est tous dans cette situation. Le dernier TP est corsé et j'imagine qu'au moins 90% des gens s'arrêtent là. Pour ma part, je comprends les classes que je code, mais il y a tellement de classes, tellement de fichiers et dossiers que je suis incapable de créer les liens mentalement entre ces classes et lorsque j'y parviens, la classe suivante qui vient se rajouter me fait oublier ce que j'avais compris. D'autant plus que c'est très mal expliqué. Donc voilà comment je procède si ça peut t'aider : lorsque je code une classe et que je l'ai comprise, je passe à la suivante, peut importe si j'oublie 10 mn après. Je ferai le lien entre toutes ces classes à la fin du TP. Pas d'inquiétude donc, c'est normal d'être désespéré quand on arrive à ce niveau.
- Edité par b0nj0urlem0nde 22 janvier 2018 à 15:08:09
Bon voilà je viens vous demander de l'aide car je suis un peu dépité... Je n'en suis qu'à la partie 1 / chapitre 4 et pourtant je commence déjà à galérer.
J'arrivais à comprendre le cours. Je ne dis pas que je comprenais tout hyper facilement et hyper rapidement, mais en faisant des efforts et en me concentrant, j'arrivais à suivre.
Mais là maintenant je bloque sur une erreur. Du coup j'ai copié/collé les classes qui sont fournies dans le cours, mais même avec la version du SdZ, ça ne fonctionne pas. Vraiment je ne vois pas d'où viens cette erreur, j'ai beau chercher et fouiller dans le code fourni, je ne trouve pas...
Voici l'erreur que j'ai : " Catchable fatal error: Argument 1 passed to PersonnagesManager::__construct() must be of the type array, object given, called in C:\wamp64\www\poo\sdz\appels.php on line 15 and defined in C:\wamp64\www\poo\sdz\personnagesManager.php on line 7"
Et puis il faut ajouter à ça le fait que suis complètement paumé avec les fichiers. Doit-on en faire plusieurs ou tout mettre dans un seul ? Quels fichiers inclus quels fichiers ?...
Edit : CA Y EST j'ai trouvé !
C'était un pb avec la bdd, le code fourni dans le cours marche, mais le miens, lui, ne fonctionne toujours pas, pourtant je pensais avoir tout corrigé. Quelqu'un peu quand même tenter de m'expliquer à quoi correspond l'erreur plus haut ?
L'erreur est pourtant claire, le constructeur de ton Manager attend un tableau et il reçoit un objet. Un manager est sensé recevoir un DAO en paramètre. Tu t'es certainement trompé en ajoutant "array" devant $db dans le constructeur de ta classe.
Mohamed -> Trop tard, j'ai sup mon code. Je l'ai remplacé par celui du sdz et j'ai retapé ce que je souhaitais. Je vais quand même essayé de le récupéré.
Bonjour -> Je me doutais bien que ça concernait un tableau mais malgrés les lignes qui sont affichées je n'arrivais vraiment à savoir où se trouvais le problème. Merci pour l'explication et pour la piste que tu m'as donné.
Bonjour, à tous pour ma part je suis pas tellement d'accord avec vos critiques quand vous dites que c'est trop dure pas idéale pour les débutant au contraire en rencontrant des difficultés on apprend énormément c'est pas très basique comme tuto, et c'est ce qui est intéressant. Sauf la phase d'analyse et conception que j'accroche pas vraiment. Mais bon super c'est un cours de bonne qualité. Trop facile c'est pas bon. Merci à vous.
Le but est d’être meilleur que hier, en apprenant chaque jour quelque chose de nouveau.
Personne n'a dit qu'on voulait du facile, ne venez pas déformer nos propos. Là c'est juste qu'entre le cours dans son ensemble et ce dernier TP il y a un gouffre infranchissable pour celui qui a suivi ce cours avec un niveau moyen. La difficulté n'est pas moyenne comme c'est écrit dans la description du cours, là on tape dans le très difficile. Cela décourage forcément quand tu suis le cours et que tu tombes la dessus. Il aurait fallu faire quelque chose de moins compliqué pour nous introduire au MVC, quitte à faire un cours entier pour ce TP (qui se justifierait compte tenu de sa difficulté) en tout cas pas mettre ça à la suite d'un cours qui concerne des néophytes.
b0nj0urlem0nde, bonsoir au lieu de vous plaindre cherchez une solution, je suis dans le même cas que vous la progression c'est dépasser ses limites. Merci.
Le but est d’être meilleur que hier, en apprenant chaque jour quelque chose de nouveau.
Je vois que mes propos sont mal interprétés ou que vous faites semblant de ne pas comprendre, la deuxième option me semble la bonne sinon je ne vois pas comment vous êtes parvenue à ce stade du cours. Je n'aurai pour ma part pas de problème majeur pour achever ce TP, si vous m'aviez lu, vous auriez compris que j'ai le niveau pour le faire. C'est en constatant le nombre de personnes découragées, qui se sentent nulles alors que c'est juste le TP qui est trop dur, que j'ai décidé d'intervenir. Après, si vous, vous pensez pouvoir y arriver et comprendre, mais tant mieux pour vous ! En fait, on s'en tape j'ai envie de dire. La seule chose qui compte est que ce cours doit pouvoir être assimilé par tous, de A à Z, et je suis là pour dénoncer que non, il ne l'est pas, cette partie doit être modifiée pour être adaptée au niveau du reste du cours. Maintenant je vais arrêter de vous répondre car je sens que vous n'êtes là que pour chercher l'embrouille.
Désoler pour (...) Je devait copier mes codes mais ce Pt internet dans mon trou a rat bref quoi en soit je suis content t'as réussit, et je reprends mon Donc pour les clés étrangères :
J'espère ne pas faire de l'erreurs, bonne lecture
Après moi une clé étrangère sert au découpe une base de donnée, donc au lieu de mets Exemple 195 infos ... en une seule {TABLE} on le mets sur plusieurs {TABLE} ET {clé étrangère} permets de faire une assemblage des {TABLE}.
Une assemblage des éléments {TABLE} on utilisé une {TABLE} + {CHAMPS DE RÉFÉRENCE} Alors si on sait ça lors de la création de la base on fait de suite {CHAMPS DE RÉFÉRENCE} ça nous facilite la tache plus tard, si non on doit retrouvés les {CHAMPS DE RÉFÉRENCE} manuellement
Je vais présenter ici ma méthode pour assemblage de clé étrangère :
PRÉPARATION : Tableau php
1 - Je commence par faire une déclaration de tout les tables /!\ Tableau php à un niveau
2 - Je décidé des champs à ne pas utilisés : /!\ Tableau php à deux niveau en générale les {CHAMPS} à ne pas modifier comme {auto_increment} ma propre {CHAMPS DE RÉFÉRENCE} ou les réservé pour les traitement spéciale {CHAMPS DATE CORRECTION}...
En gros je commence par assemblé mon tableau PHP {Tbl_Sql_Fonctionnel} avec méthode {foreach} - Lister mes tables - Préparer 2 éléments, formulations des requêtes SQL (à ce stade c'est pas une LA FORMULE COMPLET mais juste la partie de {FROM} & {JOIN})
if($Num==0)
{$XFROM.="FROM $Donne Num_0\n";}
else
{$XFROM.="LEFT JOIN $Donne AS Num_$Num ON (Num_$Num.b_conception_idntfctn = Num_0.b_conception_idntfctn)\n";}
- On prépare la liste de {SHOW COLUMNS} et {FROM} {$Donne sont les élément de foreach}
$COLUMNS="SHOW COLUMNS FROM $Donne";
Résumé: On n'est toujours dans {foreach} mais là on n'as tout les éléments pour formé une requête SQL complet simple SELECT [Champ] FROM `[Nom de table]`
Ouf on ferme {foreach}
Je disait plus haut dans {PRÉPARATION #3} Des fois déclaration {Tbl_Sql_Fonctionnel} ne suffit pas il faut d'autres c'est ici Donc manuellement on le fait plus simple au début mais quand tu vas avoir plusieurs table c'est la merde On n'as que deux choses à faire pour chaque table 1 liste des {CHAMP} et {la connexion de jointure} /!\ Attention METS OU PAS LA VIGULE a la fin dans {$PrepaChamp} Regarde dans {$Affiche_Prepa}
$PrepaChamp.="Num_5.b_conception_idntfctn,b_badge_acces,Statue,";
$XFROM.="LEFT JOIN ".$this->Tbl_Strategie." ON ( id_strategie = Num_5.b_statue_cntct) ";
Assemblage finale
/*Assemblage finale SQL */
$Affiche_Prepa="".substr($PrepaChamp,0, strlen($PrepaChamp)-1)."";
$SpecialRequette="SELECT DISTINCT $Affiche_Prepa $XFROM WHERE Num_0.b_conception_idntfctn=$IdContact GROUP BY $Affiche_Prepa";
Résultat de jointure des 7 tables en une fois: Liste des {CHAMP} 32 disponibles
FROM b_1_contct_base Num_0
LEFT JOIN b_2_connexion_base AS Num_1 ON (Num_1.b_conception_idntfctn = Num_0.b_conception_idntfctn)
LEFT JOIN b_3_contct_adresse AS Num_2 ON (Num_2.b_conception_idntfctn = Num_0.b_conception_idntfctn)
LEFT JOIN b_4_contct_com AS Num_3 ON (Num_3.b_conception_idntfctn = Num_0.b_conception_idntfctn)
LEFT JOIN b_5_contct_social AS Num_4 ON (Num_4.b_conception_idntfctn = Num_0.b_conception_idntfctn)
LEFT JOIN b_6_identification_admin AS Num_5 ON (Num_5.b_conception_idntfctn = Num_0.b_conception_idntfctn)
LEFT JOIN b_7_fournisseur AS Num_6 ON (Num_6.b_conception_idntfctn = Num_0.b_conception_idntfctn)
LEFT JOIN a_elements_strategie ON ( id_strategie = Num_5.b_statue_cntct)
Formulation complet dans mon cas avec {LA FIN WHERE + GROUP BY}
SELECT DISTINCT b_nom,b_pnom,b_date_naissance,id_connexion,b_password,b_pseudo,id_adresse,b_adresse,b_postal,b_ville,b_id_pays,id_communication,b_mail,b_tel,b_fax,id_social,b_nom_social,b_adr_social,id_idntfctn,b_statue_cntct,b_poste_etablissement,b_contact_perm_cle,b_activation_carte,b_contact_photo,id_cordone_Contact,b_frnsr_juridique,b_frnsr_nom_scl,b_frnsr_date_creation,b_frnsr_date_correction,Num_5.b_conception_idntfctn,b_badge_acces,Statue FROM b_1_contct_base Num_0 LEFT JOIN b_2_connexion_base AS Num_1 ON (Num_1.b_conception_idntfctn = Num_0.b_conception_idntfctn) LEFT JOIN b_3_contct_adresse AS Num_2 ON (Num_2.b_conception_idntfctn = Num_0.b_conception_idntfctn) LEFT JOIN b_4_contct_com AS Num_3 ON (Num_3.b_conception_idntfctn = Num_0.b_conception_idntfctn) LEFT JOIN b_5_contct_social AS Num_4 ON (Num_4.b_conception_idntfctn = Num_0.b_conception_idntfctn) LEFT JOIN b_6_identification_admin AS Num_5 ON (Num_5.b_conception_idntfctn = Num_0.b_conception_idntfctn) LEFT JOIN b_7_fournisseur AS Num_6 ON (Num_6.b_conception_idntfctn = Num_0.b_conception_idntfctn) LEFT JOIN a_elements_strategie ON ( id_strategie = Num_5.b_statue_cntct) WHERE Num_0.b_conception_idntfctn=95613848 GROUP BY b_nom,b_pnom,b_date_naissance,id_connexion,b_password,b_pseudo,id_adresse,b_adresse,b_postal,b_ville,b_id_pays,id_communication,b_mail,b_tel,b_fax,id_social,b_nom_social,b_adr_social,id_idntfctn,b_statue_cntct,b_poste_etablissement,b_contact_perm_cle,b_activation_carte,b_contact_photo,id_cordone_Contact,b_frnsr_juridique,b_frnsr_nom_scl,b_frnsr_date_creation,b_frnsr_date_correction,Num_5.b_conception_idntfctn,b_badge_acces,Statue
Je te laisse la class complet pour la partie des mises à jours des tablas et à la fin t'as aussi les structure Bd pour tester ATTENTION il te faut effacé les fonctions pour que ça marche parce que d'autre fonctions se trouve dans {FichierIndispensable} Si tu veux voir le fonctionnement complet mon CV http://le-paul.fr/ecommerce/Contact.php
Les effets attendues de la class 1 - Ajout Modifier des données 2 - Déclenchées les éléments en fonction la demande ( $TblAdminstration=array(0,1,2,3,4,5=>1 ,6=>1) ) Exemple M.xyz peu travailler uniquement sur corrections de données des personnes ( $TblAdminstration=array(0,1,2,3,4) ) M.abc la même chose mais lui il peu ajouter éditer des carte d’accès (1...4 + 5=>1 ,6=>1) Et bien d'autres, on n'est pas obligé de mets le #nbs ni l'ordre Tout ces trucs sans passés par des consignes tortues et de millions de lignes mais juste un tableau PHP
//Un tableau de donnees doit etre passé a la fonction (d'ou le prefixe "array") public function hydrate(array $donnees) { foreach ($donnees as $key => $value) { $method = 'set'.ucfirst($key);
//Liste des getters public function id() { return $this->_id; } public function nom() { return $this->_nom; } public function forcePerso() { return $this->_forcePerso; } public function degats() { return $this->_degats; } public function niveau() { return $this->_niveau; } public function experience() { return $this->_experience; }
//Liste des setters public function setId($id) { // L'identifiant du personnage sera, quoi qu'il arrive, un nombre entier. $this->_id = (int)$id; } public function setNom($nom) { //On verifie qu'il s'agit bien d'une chaine de caractere if(is_string($nom) && strlen($nom)<= 30) { $this->_nom = $nom; } } public function setForcePerso($forcePerso) { $forcePerso = (int)$forcePerso;
if($forcePerso >= 0 && $forcePerso <= 100) { $this->_forcePerso = $forcePerso; } } public function setDegats($degats) { $degats = (int)$degats;
if($degats >= 0 && $degats <= 100) { $this->_degats = $degats; } } public function setNiveau($niveau) { $niveau = (int)$niveau;
if($niveau >= 0) { $this->_niveau = $niveau; } } public function setExperience($exceptions) { $exp = (int)$exp;
$db = new PDO('mysql:host=localhost;dbname=personnage', 'root', ''); $manager = new PersonnagesManager($db);
$manager->add($perso); ?>
et voici PersonnagesManager.php
<?php class PersonnagesManager { private $_db;//Instance de PDO
public function __construct($db) { $this->setDb($db); } public function add(Personnage $perso) { // Préparation de la requête d'insertion. // Assignation des valeurs pour le nom, la force, les dégâts, l'expérience et le niveau du personnage. // Exécution de la requête.
$q->execute(); } public function delete(Personnage $perso) { // Exécute une requête de type DELETE. $this->_db->exec('DELETE FROM personnage WHERE id = '.$perso->id()); } public function get($id) { // Exécute une requête de type SELECT avec une clause WHERE, et retourne un objet Personnage. $id = (int)$id;
$q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage WHERE id = '.$id); $donnees = $q->fetch(PDO::FETCH_ASSOC);
return new Personnage($donnees); } public function getList() { // Retourne la liste de tous les personnages. $perso = [];
$q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage ORDER BY nom');
while($donnees = $q->fetch(PDO::FETCH_ASSOC)) { $perso[] = new Personnage($donnees); } return $perso; } public function update(Personnage $perso) { // Prépare une requête de type UPDATE. // Assignation des valeurs à la requête. // Exécution de la requête. $q = $this->_db->prepare('UPDATE personnage SET forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience WHERE id = ;id');
angelus2812. Inséré les données manuellement pour testez on ne va pas passez le code au peigne fin puis fais différent teste si il y a une éventuelle erreur corrige là si tu peux pas fais le savoir sur le mooc.
Le but est d’être meilleur que hier, en apprenant chaque jour quelque chose de nouveau.
Mais lorsque je regarde dans MySql l'enregistrement ne se fait pas.
J'ai cette partie du code:
$perso = new Personnage([
'nom' => 'Victor',
'forcePerso' => 5,
'degats' => 0,
'niveau' => 1,
'experience' => 0
]);
$db = new PDO('mysql:host=localhost;dbname=personnage','root','');
$manager = new PersonnagesManager($db);
$manger->add($perso);
qui pointe vers cette partie de la classe PersonnagesManager.
public function add(Personnage $perso);
{
// Préparation de la requête d'insertion.
// Assignation des valeurs pour le nom, la force, les dégâts, l'expérience et le niveau du personnage.
// Exécution de la requête.
$q = $this->_db->prepare('INSERT INTO personnage(nom, forcePerso, degats, niveau, experience) VALUES
(:nom, :forcePerso, :degats; :niveau, :experience) ');
$q->bindValue(':nom', $perso->nom());
$q->bindValue(':forcePerso',$perso->forcePerso(),PDO::PARAM_INT);
$q->bindValue(':degats', $perso->degats(),PDO::PARAM_INT);
$q->bindValue(':niveau', $perso->niveau(),PDO::PARAM_INT);
$q->bindValue(':experience',$perso->experience(),PDO::PARAM_INT)
$q->execute();
Je ne reçois pas message d'erreur. Et le scrip point bien vers ce scrip.
Pensez-vous que mon probleme ce situe plus du coté da la data base?
//Avant Exécution la requête t'as pas mets la connexion vers ta base de donnée
Autre truc prends cette d'habitude de préparées plusieurs situation de connexion croie moj c'est bien utile et mois d’emmerdements plus tard Ce qui me concernant je crée une class de connexion à part puis tout les varriable et conditions dans un autre fichier
Concrètement class
class ConnectBDD
{
// CONSTRUCTEUR
public function Connect($Aide='',$Demande='')
{
define('Creation', '01-Decembre-2017' );
define('Objet', "Description du projet Objet de la classe" );
if($Aide=="F1"){$Explication="Fonction fait partir de la class CONSTRUCTEUR <br>Permets crée une connection a la base de donnée";return"<p>$Explication</p>";}
else
{
require"Sql/SQL_Conf.inc.php";
if($Demande==Connect_Bdd){ try {$Base[Prexife] = new PDO("mysql:host=".$DB_serveur[Prexife].";dbname=".$DB_base[Prexife].";charset=utf8", "".$DB_utilisateur[Prexife]."", "".$DB_motdepasse[Prexife]."");} catch(Exception $e) {die('Erreur : '.$e->getMessage());} return $Base[Prexife] ; }
if($Demande==DateActuel){ $Demande = $this->DateActuel= date('d-m-Y H:i:s');}
return $Demande;
}
}
}
Il se peu que t'aura besoin de connexion sur plusieurs base de données
J'ai une difficulté à comprendre cette partie ou ile est écrit
Une propriété de trait peut être statique. Mais attention, dans ce cas, chaque classe utilisant ce trait aura une instance indépendante de cette propriété.
En voici le code associé
<?php
trait MonTrait
{
protected $attr = 'Hello !';
public function showAttr()
{
echo $this->attr;
}
}
class MaClasse
{
use MonTrait;
}
$fille = new MaClasse;
$fille->showAttr();
Merci d'avance !
Informtion is potential power; Action is everything !
En gros tu peu utilisé le même le nom de fonction deux fois Ex :: Xyz ::
1 fois dans une class exemple class :: Xyz == Bonjour,
plus 1 fois dans (trait) trait:: Xyz == Tout le monde
et si t'a besoins d’appeler les deux fonction class + trait
il vas te sortir Bonjour, Tout le monde
Mise en garde
Certainement très pratique quand tu récupère des trucs chez un mec et y ajoutées les tiens, + évitées de Err fatal
Là tu perdra l'harmonisation,
Car dans une fonction souvent on demande
- Aller chercher une autres trucs ailleurs (class,fonction,Bd,Js,Css...)
Un bout de fonction par ici plus par là bas... au bout du compte tu ne sera pas plus comment il tourne ton programme bonne chance pour tes futures interventions.
Donc pour moi, évite ça c'est mieux
Ha oui, j'oublie
Pour utiliser ton (trait)
t'as pas besoins de faire
Ex là, c'est pour une class: $GrosBesoin =new Pipi ();
et en suite tu dit $GrosBesoin->Action(danstaclassPipi) ;
Pour ton (trait)
1 Tu déclare
trait Change {
public function Pipi () {
echo 'Dans un coin...';
}
}
2 - t'appelle directement la fonction
$GrosBesoin->Pipi (); // et là il s'affiche Dans un coin...
J'espère pas soufflé de connerie vérifier quand même
- Edité par LEPaul 12 février 2018 à 10:48:03
Fidèle résumé de mes capacités ! Bon à rien, mauvais à tout. Faire le moins, mais BIEN
Merci pour ta réponse mais est-ce que tu peux formater ton code et ajouter un code complet que je peux exécuter comme ça je comprendre une fois pour toute !
Merci beaucoup !
Informtion is potential power; Action is everything !
Bonjour tout le monde, S'il vous plaît, pouvez vous me donner des exemples entre deux classes en relation de composition et d'autres en relation d'agrégation ?
D'aprés ce que j'ai compris ce qui suit est une composition :
<?php
class Foo{
public $bar;
public function __construct($bar){
$this->bar = $bar;
}
}
class Bar{
public $attribut = "Bar";
}
$f = new Foo($b = new Bar);
echo '<pre>';
var_dump($f);
echo '</pre>';
Ou plutôt comme ReflectionClass qui n'existera jamais sans être au préalable construite avec une autre classe !
Et l'aggrégation c'est quand les deux classe ont une interaction entre eux mais il ne sont pas interdépendant comme :
<?php
class Foo{
public $bar = array();
public function __construct($bar){
array_push($this->bar, $bar);
}
}
class Bar{
public $attribut = "Bar";
}
$b = new Bar;
$f = new Foo($b);
echo '<pre>';
var_dump($f);
echo '</pre>';
Veuillez s'il vous plaît me donner plus d'exemple concrets svp !
- Edité par ELJAOUHARI Hamza 13 février 2018 à 15:34:58
Informtion is potential power; Action is everything !
https://skribascode.fr