begin process at 2012 02 14 17:19:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Champ faisant référence à une autre classe.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Administrateur CodeS-SourceS
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 !

1 2

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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales