POO en PHP ----> MysQLi, problème, AIDE

Fermé
guillaume_74 Messages postés 111 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 20 nov. 2008 à 20:35
 nadia - 5 mars 2012 à 20:15
Bonjour,
je suis en train de coder une petite application PHP de gestion de stock... étant jusque la en procédural, je suis en train de le faire migrer en objet.
Cependant, j'ai des erreurs qui me dérange...
juste un petit exemple de ce que je fais:
class MaClasse
{
   private  $connexion;
   private $resultatRequete;
   function __construct() 
   {
      include("params.inc.php");
      $this->connexion = new mysqli(HOST, USER, PASSWORD, BASE);
    }
   function faireRequeteExecute()
   {
       $this->resultatRequete = $this->connexionbdd->query("select * from maTable");//execution de la requete
	$total = $this->resultatRequete->num_rows;
	return $total; // en faisant un echo, j'ai effectivement le résultat que je devais avoir==>27
   }
   function afficheResultat()
   {
        while($row = $this->resultatRequete->fetch_object())
	 {
            echo "champs 1: row[0]<br />";
            echo "champs 2: row[1]<br />";
          }
   }   // et la, j'ai l'erreur: Fatal error: Call to a member function fetch_object() on a non-object


voila, j'ai synthétisé mon code, ma question est la suivante: Est-ce possible au moins d'accéder a un attribut en tant que résultat de requete? ou bien non? (en procédural ca marche très bien! je me sers de $total pour faire une pagination)
ou bien ptètre que je fais une erreur de syntaxe, enfin voila, j'espère que quelqu'un pourrait m'aider

Merci a tout ceux qui prendront la peine de répondre et même lire :)
A voir également:

4 réponses

foo-bar kaniar
20 nov. 2008 à 21:00
je ne comprends pas trop a ta question mais si tu veux accéder directement a des éléments après avoir instancié l'objet,
il ne faut pas les mettre en private, laisse les en public.
Ou sinon, pour respecter l'encapsulation, creer des getVariable et SetVariables :)
0
guillaume_74 Messages postés 111 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 22
20 nov. 2008 à 21:19
Oui je sais bien, mais c'est pas le soucis (j'ai taper mon exemple juste la dans l'intant)
Ce qui m'énerve... c'est que si je faisais:
function faireRequeteExecute()
   {
       $this->resultatRequete = $this->connexionbdd->query("select * from maTable");//execution de la requete
	$total = $this->resultatRequete->num_rows;
        while($row = $this->resultatRequete->fetch_object())
	 {
            echo "champs 1: $row->champ1<br />";
            echo "champs 2: $row->champ2<br />";
          }
	return $total; 
   }


Et ben ça marche... la je ne comprends pas le problème :s

et a l'appel de la fonction, j'utilise bien le même objet...
0
guillaume_74 Messages postés 111 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 22
20 nov. 2008 à 21:55
personne n'arrive a comprendre? :S
0
Bonjour,

Je pense que, si j'ai bien compris ton questionnement, tu n'as pas dû bien comprendre a quoi sert "private" dans la POO.

Ma réponse se base sur l'hypothèse que la méthode "faireRequeteExecute()" est membre de ta classe.

Le fait qu'un attribut soit privé ou public n'a de sens que vis à vis de l'extérieur de l'objet. A l'intérieur, même un attribut privé est public (Dieu merci, sinon on aurait des difficultés à y avoir accès).

Donc, dans ta méthode membre, tu y a donc accès.

dans l'exemple ci dessous, n'importe quel compilateur/interpreteur générera une erreur.

$var = new MaClasse();

$var2 = $var->resultatRequete = $var->connexionbdd->query("select * from maTable");



Je souhaite avoir répondu à ta question.

Bonnes fêtes,
0
cours Poo vb.net sur :
sites.google.com/site/developpevotreinformatique/home
0