IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Passage d'un objet à une classe


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 86
    Points
    86
    Par défaut Passage d'un objet à une classe
    salut,

    j'ai 2 classes. la 1ere sert a créer une connection vers une DB et a passer des requetes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
     
    class sqli {
     
    	var $mysqli;
     
    	function sqli(){
     
    		global $config;
    		$this->mysqli = new mysqli($config['db_server'], $config['db_user'], $config['db_password'], $config['db_database']);
     
     
    	}
     
    	function runSQL($sql_string){
     
    		$resultQuery = $this->mysqli->query($sql_string);		
    		return $result;
     
    	}
     
    	function closeConnection($doCommit = true){
    	}
     
    }
     
    ?>
    une autre classe sert à construire une requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    class request {
     
    	var $fieldNames;
    	var $fieldValues;
    	var $table;
    	var $DBconnection;
     
    	function request($_table,$_DBconnection){
    		$this->table        = $_table;
    		$this->fieldNames   = array();
    		$this->fieldValues  = array();
    		$this->DBconnection = $_DBconnection;
    	}
     
    	function addField($fieldName,$fieldType){
    		array_push($this->fieldNames,$fieldName);
    		array_push($this->fieldValues,$this->setField($fieldName,$fieldType));
    	}
     
    	private function setField($fieldName,$fieldType){
    		$res = $this->DBconnection->real_escape_string(postParameter($fieldName,''));
    		return $res;
    	}
     
    }
     
    ?>
    et depuis une page j'execute comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $mysqli = new sqli();
    $request = new request('Primers',$mysqli);
    donc je passe une instance de la classe sqli lors de la création de l'instance de la classe request. Et pourtant la ligne suivante foire : Call to undefined method sqli::real_escape_string()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $res = $this->DBconnection->real_escape_string(postParameter($fieldName,''));
    Et si au lieu de passer un objet mysqli à la classe request et d'essayer de m'en servir, j'en recrée un directement dans la classe request, là ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    global $config;
    $tmp = new mysqli($config['db_server'], $config['db_user'], $config['db_password'], $config['db_database']);	
    $res = $tmp->real_escape_string(postParameter($fieldName,''));
    Vous savez ce qui peut bloquer?

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    C'est assez simple :
    Tu appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->DBconnection->real_escape_string
    $this->DBconnection est instancié en tant qu'objet de type sqli ( ta première classe dont tu nous donne le code )
    La classe sqli ne contient pas de méthode real_escape_string, au contraire de la classe mysqli, qui est une variable de ta classe sqli.

    Donc je te conseillerais d'utiliser un __call dans ta classe sqli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function __call( $methodName, $methodArgs ){
      if( !method_exists( $this -> mysqli, $methodName ) ) 
        throw new Exception( __CLASS__ . ' :: ' . $methodName . ' n\'existe pas' );
      return call_user_func_array( Array( $this -> mysqli, $methodName ), $methodArgs );
    }
    Ainsi, toute fonction inconnue appelée sur ta classe sqli sera renvoyé sur l'instance effective de mysqli, si elle existe. Si la fonction n'existe pas, ça ne plantera pas plus que l'actuel, et si la fonction est définie dans la classe, elle sera bien sur appelée en premier.

    Bonne journée.
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    super ca marche. merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage des variables d'une classe à une autre
    Par zibou7 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2007, 16h46
  2. PB de passage d'argument dasn une classe
    Par Naelhem dans le forum C++
    Réponses: 13
    Dernier message: 26/10/2006, 20h03
  3. [VB.NET] passage d'arguments d'une classe(form1) à une autre
    Par zouhib dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/05/2006, 16h54
  4. Passage de paramètre d'une classe à une autre
    Par semenzato dans le forum C++
    Réponses: 3
    Dernier message: 21/09/2005, 13h59
  5. [JSP][STRUTS] Passer des objets à une classe action
    Par maphi dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2005, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo