Objet dans une classe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Objet dans une classe

par d-sam » 29 nov. 2007, 13:40

à quelques variations près, c'est ce que j'utilise, et j'en suis satisfait.
dans mes classes qui nécessitent des accès BDD, je fais un simple

Code : Tout sélectionner

$this->db = connect_bdd::getInstance();
dans le __construct de la classe, et ça roule ;)

par AB » 28 nov. 2007, 19:43

En reprenant le lien donné par d-sam on pourrait faire une classe de connexion qui pourrait ressembler à
class connect_bdd {

    private static $instance;	
	
    private function __construct() {
	
		require('Connections/fichier_bddconnect.php');//contenant le nom de la bdd et la connexion		
		mysql_select_db($nom_bdd, $connexion);
	}
	
	
    public static function getInstance() {
	
        if(self::$instance == NULL) {self::$instance = new connect_bdd();}

         return self::$instance;
     }
	 
}

//appelée une ou plusieurs fois de n'importe où, en faisant 
connect_bdd::getInstance();

par Hywan » 26 nov. 2007, 23:16

J'ai dis n'importe quoi haha :P. J'ai pas compris que t'avais une classe MySQL ^^. J'ai pensé que vous parliez d'un type déjà défini dans PHP 5.

Bon on oublie tous mes messages :P. On mettra tout ça sur le compte de la fatigue, hein, ça reste entre nous ^^.

par momox » 26 nov. 2007, 23:05

Evidemment vu quephp est un langage non typé et que zend studio n'est pas sensé connaître les données de ta variable. Mais as tu vraiment besoin de l'autocomplétion ? Personnellement j'utilise un éditeur de texte tout con, et je ne développe pas moins bien pour autant… Bref, ces gadgets simplifient la vie, mais seulement si on n'en est pas dépendant.

Bref, pour ton problème, tu peux essayer d'ajouter ceci dans le constructeur :
function __construct(MySQL $sql)
mais je ne garantis rien et je t'inciterais à garder cette méthode même si tu n'as pas l'autocomplétion…
Heu, pour certains fonction, j'utilise le typage, pour restreindre les données d'entrées et n'avoir que des données traitées par une class donnée et ca fonctionne très bien pourtant... Donc la, j'ai du mal a saisir la remarque de HyWaN a ce sujet... :?
Ptet que ca ne fonctionne qu'en php5 aussi ^^

par Hywan » 26 nov. 2007, 20:08

J'ai oublié de citer Sékiltoyai. Il proposait la solution (élégante certes) suivante : public function maMethode ( MySQL mysql ). Ceci ne sera pas compris par PHP. Il ne supporte que les types objets (Object et tous ces enfants), et le type Array également.

Je ne contredis pas le fait d'utiliser des méthodes ou attributs de classes statiques. Ça reste àmha une bonne idée. Mais on ne sait toujours pas ce qu'il (l'auteur du billet) veut faire hehe.

par AB » 26 nov. 2007, 19:52

PHP va refuser le typage MySQL. Il ne prend que les objets, et Array. D'ailleurs, je me suis au Java récemment (pour la fac), et bin c'est vraiment sympa. On a du mal à revenir sur PHP après (niveau typage je parle).
Ben j'ai un peu de mal à comprendre ce que tu veux dire, d'autant plus que précédemment tu préconisais une méthode statique pour la connexion ?

par Hywan » 26 nov. 2007, 17:57

PHP va refuser le typage MySQL. Il ne prend que les objets, et Array. D'ailleurs, je me suis au Java récemment (pour la fac), et bin c'est vraiment sympa. On a du mal à revenir sur PHP après (niveau typage je parle).

par d-sam » 26 nov. 2007, 16:34

NoNos: renseigne toi sur le Singleton. c'est un design pattern qui te permet de n'avoir qu'une seule instance d'une classe donnée, et de te la "trimballer" à droite et à gauche.
typiquement ce que tu veux faire avec mysql!
tu pourras accéder à ton object "oMysql" dans toutes tes classes, sans passer de paramètres. c'est beaucoup plus propre et le concept n'est pas du tout difficile à appréhender.

essaye, par exemple, ici : http://www.journaldunet.com/developpeur ... ry-1.shtml

bon courage!

par Berzemus » 26 nov. 2007, 15:26

C'est clair, quand je donne des cours, je force l'utilisation du bloc-note.

Et s'ils sont gentils, ils passent à un truc qui supporte la coloration syntaxique.

Me bloc-note, c'est essentiel.
Image

par Sékiltoyai » 26 nov. 2007, 14:30

Evidemment vu quephp est un langage non typé et que zend studio n'est pas sensé connaître les données de ta variable. Mais as tu vraiment besoin de l'autocomplétion ? Personnellement j'utilise un éditeur de texte tout con, et je ne développe pas moins bien pour autant… Bref, ces gadgets simplifient la vie, mais seulement si on n'en est pas dépendant.

Bref, pour ton problème, tu peux essayer d'ajouter ceci dans le constructeur :
function __construct(MySQL $sql)
mais je ne garantis rien et je t'inciterais à garder cette méthode même si tu n'as pas l'autocomplétion…

par NoNos » 26 nov. 2007, 03:22

Je voulais faire sa au depart mais zend studio ne fait pas la complétion quand je mets un truc du genre :
$this->mysql->query($query)

par Sékiltoyai » 26 nov. 2007, 02:59

Bah c'est question de choix… Personnellement j'utilise le passage d'une référence qui te permet d'avoir autant de connexions que tu le désires, et qui est plus simple à implémenter pour un débutant puisque la notion de méthodes statiques se voit souvent après la notion d'instanciation d'objets.

Donc pour la mise en œuvre, c'est exactement le message de zeus. Tu instancies ta classe MySQL :
$sql = new MySQL();
Dans ta classe Menu, tu prévois un attribut privé pour stocker l'objet MySQL :
private $sql = NULL
Et dans ton constructeur, tu prends en paramètre l'objet sql à stocker et tu l'assignes à l'attribut :
function __contruct($sql)
{
    $this->sql = $sql;
}
Lors de la création du menu, tu as donc juste à lui passer ton objet sql :

Code : Tout sélectionner

$menu = new Menu($sql);
Et tu peux maintenant utiliser sans problème ta connexion sql dans ton menu :
public function test()
{
    $this->sql->query('SELECT "Ca marche !"');
}

par NoNos » 26 nov. 2007, 01:10

Vous me conseillé quoi, la reference ou les attributs statique?

par Hywan » 26 nov. 2007, 01:02

Ou tu utilises le design pattern Singleton :D ? Bon on se calme ...
Tu connais les notions d'attributs de classes statiques par exemple ?

par h0_noMan » 26 nov. 2007, 00:59

A ce moment la tu passe en parametre de ta fonction ou tu souhaites acceder a ton serveur mysql une reference de l'instance de ta classe mysql crée précedemment.