Débuts en poo : demande d'aide / relecture code

Mammouth du PHP | 531 Messages

20 janv. 2009, 19:53

Bonsoir,

Voilà j'ai commencé à créer des classes qui sont pour l'instant réparti dans 3 familles : user, news et photo. Elles travaillent ensemble, le tout forme un script de news... enfin ce n'est pas terminé évidement.

Etant vraiment un newbie en objet j'aimerais bien avoir quelques avis, histoire de voir si j'ai a peu près compris ce qu'était la programmation objet... je sais qu'il y a beaucoup d'erreurs, mais je cherche surtout a savoir si les classes ont bien les méthodes qu'elles devraient avoir.

Dans l'idée j'ai essayé de faire une classe de gestion pour chaque objets user, news et photo. Car ça ma paraissait logique qu'un objet news ne puisse pas avoir une méthode "supprimer une news", tout comme une voiture ne peut pas se réparer elle même.

Mes classes de gestion se chargent donc de vérifier certaines choses avant de créer les objets, comme par exemple qu'une chaine n'est pas vide, mais aussi de faire les requêtes SQL et de retourner des listes d'objets. Elles n'ont pas de propriété, juste des méthodes. Les objets quand à eux n'ont pas de méthode mais juste des propriétés.

J'espère que quelqun aura 5 petites minutes pour regarder ça, car je suis dans le doute sur ma façon d'approcher la poo :wink:

zip : http://supercanard.phpnet.org/depot/class.zip

Mammouth du PHP | 1029 Messages

28 janv. 2009, 10:40

Bonjour,

Personnellement dans les classes user,image,news, je ne mettrais pas les variables en publique, parce que dans ce cas tu n'encapsules pas ta classe.

Rien n'empêchera plus tard de modifier le nom des variables si tu ne le veux pas.
Tu risques quelque chose de ce genre :
$image = new images(toto,jpg);
$image->fullname = 'logiciel.exe'

Il vaut mieux utiliser des getters et setters
class image {
    private $_nom;
    private $_extension;
    private $_fullName;

    public function  __construct($nom,$extension) {
        $this->_nom = $nom;
        $this->_extension = $extension;
        $this->_fullName = $nom.$extension;
    }

    public function getNom() {
        return $this->_nom;
    }

    protected  function setNom($nom) {
        $this->_nom = $nom;
    }

    public function getExtension() {
        return $this->_extension;
    }

    protected  function setExtension($extension) {
        $this->_extension = $extension;
    }

    public function getFullname() {
        return $this->_fullName;
    }

    protected  function setFullname($fullName) {
        $this->_fullName = $fullName;
    }


}
J'ai mis les setters à 'protected',comme cela seule les classes étendues ont le droit de modifier les valeurs.

de plus je sortirais les codes PDO de façon à séparer le code des requêtes SQL.
Je supprimerais également le principe de globaliser la variables de connexion à la db

Mais bon c'est un façon de voir
L'expérience est la somme de toutes nos erreurs.