Page 1 sur 1

Incompréhension pour déclarer une variable

Posté : 29 août 2010, 11:33
par scarf3ss3
Bonjour à tous,

J'ai du rater un épisode, sur un bout de code j'ai une une du type NOTICE.
class system
{
	// DECLARATION DES PROPRIETES
	public $system;
	// $system->page       // Toutes les infos concernant la page en cours
	// $system->html       // Contient toutes les balises html
	// $system->bdd        // Travail avec la base de données
	// $system->user       // Toutes les infos de l'utilisateur
	public $id_page;       // La page appelée à l'origine
	public $erreur_fatale; // Si à True, l'utilisateur est redirigée vers une page simple, lui indiquant une erreur.
	public $langue;        // Langue de la page en cours
	
	// CONSTRUCTEUR
	public function __construct ()
	{
		// INCLUSION DES FICHIERS
		require_once ('config.conf.php');                 // Fichier config
		require_once (DOSSIER_OUTILS.'fonctions.inc.php');// Ensemble de fonctions utiles
		require_once (DOSSIER_OUTILS.'bdd.class.php');    // Class de la base de données
		
		// INITIALISATION DES VARIABLES
		$this->erreur_fatale = false;
		$this->system->bdd = new bdd();
	}
}
Voilà et à l'appel de cette class, j'ai cette erreur
Strict Standards: Creating default object from empty value in
Correspondant à la ligne $this->system->bdd = new bdd();

Je comprends qu'il n'est pas content parce que $this->system est vide.
Mais dans mon cas, comment faire ça propre pour que je puisse lui attribuer uniquement ces objets :
  • $system->page
  • $system->html
  • $system->bdd
  • $system->user

Re: Incompréhension pour déclarer une variable

Posté : 29 août 2010, 19:10
par stealth35
il faut faire une class system

Re: Incompréhension pour déclarer une variable

Posté : 29 août 2010, 20:40
par momox
Fais un $this->system = new stdClass(); avant de faire ton $this->system->bdd = new bdd;
Tu essaies d'attribuer une proprièté a une instance de classe alors qu'il n'y en a aucune.

Re: Incompréhension pour déclarer une variable

Posté : 31 août 2010, 14:19
par scarf3ss3
Merci de la réponse. Par contre
$system n'est pas une instance de class, c'est une propriété de la class system qui aurait pu s'appeler $toto ou $tata.

Re: Incompréhension pour déclarer une variable

Posté : 31 août 2010, 14:31
par zeus
ok, alors prenons le problème autrement : en dehors du modèle objet.
Un attribut n'est, ni plus, ni moins qu'une variable.

Est-ce qu'écrire ça te choque ?
$tata;
$tata->bdd = 'qqchose';
Oui, certainement ...
Et bien dans une classe, c'est la même chose, un attribut n'est pas magique, et tu ne peux pas accéder à des éléments qui sont en dessous comme ça, à moins que l'attribut soit lui même une instance de classe ;)

Re: Incompréhension pour déclarer une variable

Posté : 31 août 2010, 18:59
par scarf3ss3
Donc la solution visant à faire un
$this->system = new stdClass();
est propre ?

En gros je déclare que $this->system est une instance de class avec ça.
Ca me parait pas propre, je ne suis pas le seul martien à vouloir faire un truc de la sorte tout de même ?

Surtout que je veux y stocker des instances de class effectivement mais aussi des array.
Bref, tout mon system (d'où son nom) utile à chaque page se trouve dedans.

Re: Incompréhension pour déclarer une variable

Posté : 31 août 2010, 19:21
par stealth35
Donc la solution visant à faire un
$this->system = new stdClass();
est propre ?

En gros je déclare que $this->system est une instance de class avec ça.
Ca me parait pas propre, je ne suis pas le seul martien à vouloir faire un truc de la sorte tout de même ?

Surtout que je veux y stocker des instances de class effectivement mais aussi des array.
Bref, tout mon system (d'où son nom) utile à chaque page se trouve dedans.

faire $this->system , c'est juste que tu lui donne une propriété qui s’appelle 'systeme' c'est tout, en rien c'est une classe

donc a un moment ou un autre, faut bien lui dire que c'est une classe, sois ta une class systeme et tu fais
$this->system = new System();

sois c'est rien, et en gros au lieu de stocker dans un tableau tu stockes dans un objet et la tu feras
$this->system = new stdClass();

niveau propété, sois tu fais une class System sois tu met ca dans un array

$this->system = array();
$this->system['bdd'] = new bdd();

je te conseil d'allé voir du coté du pattern Registry