Petites questions sur la programmation orianté objet

Signaler
Messages postés
164
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
7 octobre 2009
-
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
-
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

6 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

non les variables ne sont pas accesibles d'une page à l'autre (sauf quand tu utilises des sessions).

Disons que pour la philosophie, je pense que FhX pourra te l'expliquer ;-)

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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.
Messages postés
164
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
7 octobre 2009

alors admetons que je créer des objets, est ce que ces objets je peut les memoriser dans une base de données?

cacoucatatonique
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Regarde du côté de serialize() et unserialize()

http://fr.php.net/manual/fr/function.serialize.php
http://fr.php.net/manual/fr/function.unserialize.php

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
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 :)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
"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