Petites questions sur la programmation orianté objet
cs_cacoucatatonique
Messages postés164Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 7 octobre 2009
-
31 janv. 2006 à 14:23
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 2015
-
31 janv. 2006 à 20:27
dans ce type de programmation, on definit des objets dans lesquels ont
retrouves differentes variables, mais je voudrais savoir en faite
comment sont memorisées les variables et surtout si elles sont
accessibles d'une page à l'autre!!!!
car je ne comprend pas bien cette phylosophie de programmation!!!
cacoucatatonique
A voir également:
Petites questions sur la programmation orianté objet
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 31 janv. 2006 à 16:09
Hello,
ouais, les objets réagissent comme de simples variables : leur portée est limité à la page dans laquelle ils ont été déclarés (instanciés).
Quand aux variables appartenant à un objet (ses propriétés membres en fait), elles sont "mémorisés" en les déclarant aussi.
Petit ex rapide :
<?php
class maClasse {
public $var1; // ici on déclare une variable publique, donc accessibe de l'extérieur de la classe. Elle n'a pas de valeur par défaut
public $var2 = 1; // celle-ci a une valeur par défaut.
private $varPrivee = 2; // cette variable n'est pas accessible en dehors de la classe
public function __construct () { // constructeur de la classe
echo 'je suis construit';
}
public function setPrivate ($val) { // méthode publique, donc accessible en dehors de la classe, pour donner une valeur à la variable privée
$this -> varPrivee = $var;
}
public function getPrivate () { // méthode publique pour ren,voyer la valeur de la propriété privée
return $this -> varPrivee;
}
}
$oClass = new maClasse (); // va afficher : 'je suis construit';
echo $oClass -> var2; // fonctionne, et affiche 1
$oClass -> var1 = 'bla'; // ok, on peut puisque la variable est publique
echo $oClass -> var1; // va afficher 'bla'
$oClass -> varPrivee = 'test'; // va échouer, la variable est privée
$oClass -> setPrivate ('test'); // ok!
echo $oClass -> varPrivee; // non, la variable est privée ;-)
echo $oClass -> getPrivate (); // ok, et va afficher 'test'.
?>
Quant à la philosophie...je te conseille beaucoup de lecture de tutos, de docs, et de codes sources orientés objets (c'est pas ce qui manque ici).
Mais bon, c'est modulaire, facile à mettre à jour, puissant, économe en lignes de code le plus souvent.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 31 janv. 2006 à 19:02
Oui, mais ca ne sert pas à grand chose de les mémoriser.
Si tu veux mémoriser une classe, c'est que ta classe doit peser son poids en or. Autrement, il est plus rapide d'injecter les variables lors d'une instanciation plutot que de récupérer un objet serialisé depuis une base de donnée.
De plus, imagine que tu serialises chaque objet pour chaque membre... Tu va te retrouver avec une base de donnée immense sans même t'en rendre compte. La serialisation n'a du bon que si tu as plein plein d'objets à serialiser. La c'est plus interessant.
Maintenant, la philosophie de l'objet c'est quoi ? Simplement avoir quelque chose qui soit maintenable plus facilement. Il est plus facile d'étendre les possibilités d'une classe plutot que d'une fonction.
Le must de la prog objet est l'intéraction des objets entre eux. En effet, à un certain niveau, la programmation objet est plus rapide que la programmation via fonctions (sisi, ca a été prouvé je sais plus où !).
Enfin moi personnelement, je préfère faire :
$db = new db;
$db->query($sql);
$num = $db->num_rows();
plutôt que de devoir faire :
$link = mysql_connect($host, $user, $passwd);
mysql_select_db($base, $link);
$query = mysql_query($sql);
$num = mysql_numrows($query);
De plus, il faut savoir que je peux faire plein de choses dans ma classe, genre détection d'erreur, gestion d'erreur... je peux aussi faire un fetch en auto pourquoi pas. Alors oui, je peux le faire en créant des fonctions, mais imagine qu'un jour je veux retravailler le code de connection à la DB en profondeur ! Bah moi, j'ai juste à faire un "extend" de ma classe alors qu'avec les fonctions j'aurais tout à ré-écrire.
Voila l'interêt de la POO.
Si tu veux des exemples, regarde dans les tutos pour une gestion d'utilisateurs vite-fait, autrement dans les codes, j'en ai filé quelques un :)
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 31 janv. 2006 à 20:27
"public function setPrivate ($val) { // méthode publique, donc
accessible en dehors de la classe, pour donner une valeur à la variable
privée
$this -> varPrivee = $var;
}
public function getPrivate () { // méthode publique pour ren,voyer la valeur de la propriété privée
return $this -> varPrivee;
}"
J'en profite pour dire que ca, ca ne sert à rien :p
Soit tu mets en public, soit tu utilises __get() et __set().
Meme si je sais que tu le sais déja, je préfère le dire pour ceux qui ne le savent pas.
Parce qu'un jour, on va se retrouver avec quelqu'un qui aura faire une classe avec des methodes :
setLogin();
getLogin();
setEmail();
getEmail();
setOther();
getOther();
etc... à ne plus en finir :D