[PHP] définition de classe

Bonjour,
avec le code suivant :

[code]<?php
class Membre {
public function __construct(){
$host = ‘mysql:host=truc.com;dbname=machin’;
$user = ‘bidule’;
$mdp = ‘chose’;
$bdd = new PDO($host,$user,$mdp, array (PDO::MYSQL_ATTR_INIT_COMMAND => ‘SET NAMES utf8’));
}

	public function champs() {
		$champs = $bdd->query('SELECT * FROM BFC');
		$donnees = $champs->fetch();
		$champs->closeCursor();
		return $donnees['pseudo'];
	}
	public $bdd; // inutile en PHP ?
}

?>[/code]
j’obtiens :

Fatal error: Call to a member function query() on a non-object in /home/base.php on line 16 ($champs = $bdd->query('SELECT * FROM BFC');)

J’ai un peu tout essayé (d’où les public partout) :017

edit : et la page qui appelle la fonction :

<?php include("base.php"); session_start(); if (!isset ($_SESSION['login'])||$_SESSION['login'] == false) header("location:index.php"); $memb1 = new Membre(); echo $memb1->champs(); ?>

J’ai un peu modifié l’approche mais le problème persiste :
Dans une première page ‘accueil’, je crée l’objet instancié de PDO que je mets dans une variable de session :

session_start(); $bdd = $bdd = new PDO($host,$user,$mdp, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); $_SESSION['base'] = &$bdd;
puis dans une autre page, un objet Membre fait appel à la méthode query de l’objet PDO (source du problème apparemment) :

[code]<?php

    session_start();     //avant l'include 
include("base.php");		
$memb1 = new Membre();
echo $memb1->champs();

?>[/code]
où base.php est le fichier suivant :

<?php class Membre { public function champs() { $objetbase = &$_SESSION['base']; $champs = $objetbase->query('SELECT * FROM BFC'); $donnees = $champs->fetch(); $champs->closeCursor(); return $donnees['pseudo']; } } ?>

C’est sûr que la fonction champs() écrite simplement sans être la méthode d’un objet devrait fonctionner mais mon objet Membre doit devenir indispensable (j’ai du mal à raisonner autrement que POO maintenant)

edit : dernière modif qui ne résout rien :
j’instancie Membre en passant l’objet PDO en paramètre au constructeur

Que donne le error.log, es tu sûr que la connexion est faite? On dirait que non

error.log devrait être dans le répertoire où se trouve le fichier causant l’erreur, non ? Je ne l’y vois pas… (sur le serveur)
Quoi qu’il en soit, la connexion est faite et la fonction retourne bien le pseudo quand je la sors de la classe Membre.
Finalement, la difficulté semble provenir du passage par la variable de session. J’ai pourtant déjà fait l’expérience avec un autre objet que je créais. Ici, l’instance de PDO devient null quand elle arrive dans le constructeur.
Edit : Ah oui, la différence c’est que je faisais un include de la classe en question. PDO est natif, un include donnera rien ?

vu sur http://www.developpez.net/forums/d1044571/php/php-sgbd/pdo/passer-objet-pdo-via-variable-session/ :

[code]Eeeeh perdu. Les objets PDO* ne peuvent pas être sérialisés donc on ne peut pas les mettre dans une variable de session car ces données sont supposées être linéarisées (ou sérialisées) ce qui signifie qu’elles seront transformées sous forme de chaine de caractères dans le but d’être mises dans le fichier de session d’apache.
Vu que les objets PDO encapsulent des ressources, ce n’est pas possible à moins d’utiliser __sleep et __wakeup.

La solution à ton problème est de créer un Singleton pour PDO et d’ouvrir ta connection en tant que persistante pour que d’une page à l’autre tu utilise toujours le même socket.

A toi de jouer [/code]

merci à toi fran.b, ça devient bon …