Accueil > Forum > > > > Champ faisant référence à une autre classe.
Champ faisant référence à une autre classe.
mercredi 6 juin 2007 à 17:43:28 |
Champ faisant référence à une autre classe.

finalspirit
|
Bonjour, Je suis actuellement en DUT Informatique et on a appris à utiliser le Java. Je connais donc les classes. Je vois pas comment ça fonctionne sous PHP, je m'explique : J'ai une classe contenant des champs. Ces champs sont de différents type (string, int etc...) puis j'en ai un de type auteur. Auteur étant un type faisant référence à une autre classe. Exemple sous Java : [code] class Auteur { private String nom; private String prenom; public Auteur(nom,prenom) { this.nom=nom; this.prenom=prenom; } } class Livre { private String titre; private Auteur auteur; public Livre(titre,auteur) { this.titre=tire; this.auteur=auteur; } } [/code] J'ai bien ma classe livre qui a un champ qui fait référence à un objet de la classe auteur. En php, faut faire comme ça ? [code] class Auteur { private $nom; private $prenom; public __construct($_nom,$_prenom) { $this->nom=$_nom; $this->prenom=$_prenom; } } class Livre { private $titre; private $auteur; public Livre($_titre,$_auteur) { $this->titre=$_titre; $this.auteur=$_auteur; } } [/code] Je pense que c'est ça, mais est ce correct... je ne sais pas donc je vous le demande :) Par contre, c'est con que la redéfinition et la surcharge ne marche pas sous PHP :( Merci d'avance !
|
|
mercredi 6 juin 2007 à 18:13:02 |
Re : Champ faisant référence à une autre classe.

J_G
|
Salut,
oui, c'est ça... Les propriétés (ne dis pas "champ" ou ton prof va te taper...) et les méthodes ne sont pas typées.
Par contre, la surcharge marche très bien !!! C'est l'héritage multiple (dit polyforme) qui n'existe pas.
A lire : http://www.php.net/manual/fr/language.oop5.php
A+
|
|
mercredi 6 juin 2007 à 18:14:41 |
Re : Champ faisant référence à une autre classe.

J_G
|
polymorphe... pardon, petite dyslexie
http://fr.wikipedia.org/wiki/Polymorphisme_%28informatique%29
|
|
mercredi 6 juin 2007 à 18:27:28 |
Re : Champ faisant référence à une autre classe.

malalam
|
Hello,
de même, tu peux, dans une moindre mesure, typer certaines choses un peu plus avant :
class Livre { private $titre; private $auteur;
public function Livre($_titre, Auteur $_auteur) { $this->titre=$_titre; $this->auteur=$_auteur; } } Ici, $this->auteur sera forcément de type Auteur puisque tu lui assigneras $_auteur, qui est forcé en Auteur dans l'appel de la méthode constructeur Livre. Au passage, en PHP 5 : class Livre { private $titre; private $auteur;
public function __construct ($_titre, Auteur $_auteur) { $this->titre=$_titre; $this->auteur=$_auteur; } } Tui peux forcer le type dans l'appel d'une méthode pour les array et les classes. C'est tout.
|
|
mercredi 6 juin 2007 à 19:41:37 |
Re : Champ faisant référence à une autre classe.

FhX
|
Ou alors, dans le cas où les paramètres du constructeur sont optionnels :
class Livre { private $id; private $titre; private $auteur;
public function __construct($id=null, $titre=null, $auteur=null) { if ( isset($id) && $auteur instanceof Auteur ) { // On en déduit que ca provient d'une base de donnée, donc c'est une entrée via constructeur $this->id = (int) $id; $this->titre = $titre; $this->auteur = $auteur; } else { $this->id = null; $this->titre = null; $this->auteur = new auteur; } }
// get/set public function setAuteur( Auteur $auteur ) { $this->auteur = $auteur; }
// etc...
}
Cette méthode te permet : soit d'avoir un objet Livre vide (dans le cas d'un formulaire avec utilisation des sessions par exemple). soit d'avoir un objet Livre rempli par le constructeur (venant d'une base SQL, d'un fichier XML, flux RSS etc...)
Voila. Faut que je pense à faire le tuto pour codefalse, j'ai pas oublié, j'ai juste pas beaucoup le temps ces temps ci :p
|
|
jeudi 7 juin 2007 à 10:17:18 |
Re : Champ faisant référence à une autre classe.

finalspirit
|
Merci pour ces informations. En faite ça ressemble beaucoup plus à du Java qu'au premier coup d'oeil :) Y a même le instaceof :)
Ben merci bien pour ces précisions :)
Je vais retourner "zieuter" un peu les classes disponibles sur le site afin de parfaire mes connaissances et améliorer mon codage PHP :)
La vie n'est qu'un jeu que l'on programme au hasard !
|
|
jeudi 7 juin 2007 à 11:12:38 |
Re : Champ faisant référence à une autre classe.

J_G
|
Salut,
A part qques exception (Camel, Math Lab, ... ) tous les langages genre script/algo se ressemblent... T'en connais un t'en connais dix!
Mais en fait, dans son mode de fonctionnement, Java n'a vraiment aucun rapport avec PHP...
PHP est facile à appréhender, tu verras
A+
|
|
vendredi 8 juin 2007 à 12:30:29 |
Re : Champ faisant référence à une autre classe.

finalspirit
|
Après deux petits jour sur PHP, en effet, il n'est pas très dur à appréhender. C'est un autre style de développement vu que c'est du web mais c'est vrai que c'est vite abordable.
Par contre, l'intérêt des classes en PHP je ne le vois pas encore. Enfin pour une web agency je suis d'accord, ça permet de développer plus vite mais pour le développement d'un site personnelle autant faire des fonctions que je trouve reviennent au même dans ce cas.
En faite, je crois que je ne vois pas l'intérêt des classes en PHP... une bon fichier PHP contenant les fonctions reviennent au même... ?
La vie n'est qu'un jeu que l'on programme au hasard !
|
|
vendredi 8 juin 2007 à 12:58:45 |
Re : Champ faisant référence à une autre classe.

J_G
|
Salut,
L'intérêt des classes en PHP ...... Ben comparé à Java où là, on ne peut pas se passer des classes - tout est structuré en objets - il est forcément moindre. Mais tout de même, c'est assez important.
Par exemple mysql... un grand classique. Si tu as PHP5, il ne faut plus utiliser mysql, mais mysqli qui est orienté objet. Là, tout d'un coup tu comprendras l'intérêt de l'objet !
De même, si tu utilises DOM... Comment faire sans objet?
Encore un exemple : beaucoup de framework utilisent des objets pour abstraire les tables des bases de données.
Une table Post : id user_id text
Une table Aswer : id post_id title text
un exemple d'utilisation vite fait : $user; // soit user l'utilisateur courrant, un objet $posts = $user->getPosts() // grace au post-id, je chope ces posts dans la table post (un tableau d'objet 'post') foreach ( $posts as $post ) { echo $post->getTitle() ; // effiche le titre $answers = post->getAnswers(); // grace au post_id de la table answer, idem foreach( $answers as $answer ) echo $answer->getText(); // Accés directe au champ text }
Bon, dans ce cas ou retrouve bien l'idée de POO, et son utilité.
Après, c'est sûr qu'on peut faire sans!!
A+
|
|
vendredi 8 juin 2007 à 13:58:08 |
Re : Champ faisant référence à une autre classe.

FhX
|
"En faite, je crois que je ne vois pas l'intérêt des classes en PHP... une bon fichier PHP contenant les fonctions reviennent au même... ?" Comme tu l'as dit, tout dépend de ce que tu veux en faire.
Maintenir une classe est très facile, maintenir 10 fonctions c'est tout autre chose.
Un exemple encore plus simple que J_G :
class news { private $auteur; private $id; private $titre; // etc... } class auteur { private $id; private $nom; // etc... }
class NewsFactory { static public function getNews($start = 0, $limit 10); }
// Ca, c'était les classes. C'est long, mais regarde la suite : foreach ( NewsFactory::getNews() as $news ) { echo $news->getTitre(); echo $news->auteur->getNom(); }
Et le modèle est le même si tu veux une gestion de commentaire, de photos etc... Tu fais un modèle de classe généraliste que tu spécialises par la suite. Le gain par rapport aux fonctions, c'est le temps de code suivant les modules, le modèle objet n'aura qu'une partie du code à re-écrire alors qu'avec les fonctions, je dois les recoder à la main.
De plus, tu peux uniformiser les méthodes. Tu prends un gestionnaire de news, et de photos. Tu veux les 10 ères news, et les 10 ères photos. Au lieu d'avoir des noms de fonctions à coucher dehords, on uniformise tout ca :
foreach ( NewsFactory::get(0, 10) as $news ) { // } foreach ( PhotoFactory:get(0, 10) as $photo ) { // }
Et dans chaque factory, tu peux gérer les inputs/output ( xml, fichiers, sgbd, ldap, rss etc..) aussi simplement qu'en disant bonjour. Alors qu'avec les fonctions, tu vas devoir faire : function getFromXML(); function getFromFile(); function getFromldap();
Moi je m'embète plus avec les objets, je passe l'objet d'interfacage entrée/sortie et il se démerde tout seul :)
La puissance de l'objet par rapport au fonction. C'est aussi une autre facon de voir qui est assez déroutant au début.
Voila pourquoi tu ne comprends pas encore tout à fait à quoi ca sert :) Mais ca viendra !
|
|
Cette discussion est classée dans : private, titre, classe, auteur, prenom
Répondre à ce message
Sujets en rapport avec ce message
Débutant en formulaire : cases à cocher [ par brofa ]
BrofBonjourJe dois développer un formulaire comportant des cases à cocher. Faut il le développer avec du javascript?Merci de bien vouloir me répondreS
PROBLEME DE CLASSE [ par FGONET ]
Bonjour,J'ai un petit problème avec une classeJ'utilise la classe suivante :class ToolBox{var $prvId;var $prvTitre;function FillTables(){$locResult[0]
Erreur pour compter les entrées d'une base de donné, donc duplication des éléments [ par djangoboy ]
Bonjour, Alors je suis en train de réaliser un scipt et j'ai besoin de ma base de données. Je pense qu'il vaut mieux que je vous balance mon script e
Erreur pour compter les entrées d'une base de donné, donc duplication des éléments [ par djangoboy ]
Bonjour, Alors je suis en train de réaliser un scipt et j'ai besoin de ma base de données. Je pense qu'il vaut mieux que je vous balance mon script e
Problème d'affichage de news. Aidez moi SVP. [ par WaNoU ThE EpSyLoN ]
Bon alors à celui qui comprend mon problème je dis chapeau !J'explique. Je cherche à faire un gestionnaire de news pour cela il y a une page de saisie
unexpected $end probleme [ par vez_from_hell ]
bonjourj'ai un probleme dans mon code qui dit unexpected en on line 139je sais que c'est souvent à cause de } mais j'ai vérifié et je ne trouve rien.
probleme de classe debutant extreme [ par mictif ]
bonjour ! je vien de tester de faire ma premiere classe en php5 avec wamp et j'ai le probleme suisvant : le code de ma classe s'affiche sur la page a
besoin d'aide pour pagination d'un moteur de recherche... [ par witch32 ]
alors voila,j'ai créé un moteur de recherche pour partitions.aujourd'hui la base contient 35000 références;pour une recherche si je tombe sur1200 résu
caractere générique [ par atolldecolombo ]
bonjourje cherche à créer une recherche multi criterepetit problème quand je ne renseigne pas un des critère comment le remplacer par un carctere géné
Téléchargement d'un document [ par dodo1600 ]
dodomomo: S'il vous plait est qu'il ya quelqu'un qui peut m'aider ? J'ai fait ce code mais j'ais un problème au niveau de l'enregistre dans la base o
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|