[PHP5] Probleme d'Objet - Fatal error: main() [function.main]

Bonjour !
J’ai un problème avec une classe que j’ai fait, ça me donne une Fatal error mais je ne sais pas d’ou ça peut venir :confused:

Voila un exemple de la classe :


<?php
//user.class.php

class User {

	private $Login;

	private $Password;

	private $Type;
	
	private $NbUser;

// Constructeur
	public final  function __construct($UnLogin,$UnPassword,$UnType='User') {
  $this->Login = $UnLogin;
  $this->Password = $UnPassword;
  $this->Type = $UnType;
	}

//Identification
	public final  function IdentUser($Login, $Password) {
  return 'pwet'; // Pas encore codé !  
	}

}

Je stock les utilisateurs dans un tableaux qui se trouve dans une variable session :


<?php
//extrait de index.php

	session_start();
	// Création Administrateur par Défaut
	require('class/user.class.php');
	$User = new User('Admin', md5('password'), 'Admin');
	$Login = $User->GetLogin();
	$TabUser[$Login] = serialize($User);
	$_SESSION['user'] = $TabUser;
?>

Puis je récupére mon objet (Par defaut une instance est lancé automatiquement, mon tableau n’est donc pas vide) pour éxécuter une méthode:


<?php
//identification.php

session_start();
$TabUser = $_SESSION['user'];
$login = $_POST['login'];
if (array_key_exists($login, $TabUser)) {
	$User = unserialize($TabUser[$login]);
	$User->IdentUser($_POST['login'], $_POST['password_md5']);
} else {
	echo 'User non enregistré';
}
?>

Donc qd il arrive a la ligne avec ‘IdentUser(…)’, il me renvoi cet arreur là:


Fatal error: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "User" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in c:\program files\easyphp1-8\www\HK\Cident\identification.php on line 7

Je ne comprend pas, pourtant j’ai bien fait un unserialize sur mon objet :frowning:

Merci d’avance !
PS: Mon code n’est pas top top, je suis débutant ^^

Ce serait pas ton "$Login = $User->GetLogin();" qui mettrait la zone???

User étant une instance de la calse, GetLogin devrait être une procédure de cette dernière.

Or, je ne trouve pas de getLogin dans les définitions de ta classe…

Je ne l’ai pas mise là, car le probleme ne vient pas de la.
GetLogin est dans ma classe et retour le nom utilisateur de l’instance en cours.

Mais c’est l’erreur que je ne comprends pas :frowning:

Parce qu’il faut certainement faire un

require(‘class/user.class.php’);

avant de lire l’objet ? :slight_smile:

Il saît que c’est un objet, mais il ne sait pas de quelle classe, et pire : il n’a même pas la classe. Le message d’erreur est pertinent : il te dit de vérifier que la classe User sur laquelle tu travaille a bien été chargée avant.

Ahh oui, ma faute : x
Merci beaucoup !
Par contre j’ai une autre question mais au niveau ‘conceptuel’, pour compter le nombre de mes utilisateurs, je fais une methode ?
Par que comme j’ai fait je pense que c’est pas vraiment bien, vu que NbUser user aura un valeur a chaque fois qu’un utilisateur sera créé.
D’aprés vous quelle serait le meilleur d’avoir le nombre d’utilisateur ? Juste compter le tableau a part et ne pas la methode dans la class ?
Je suis perdu :confused:

niveau conceptuel c une variable static a la classe mais bon je sais pas trop ce que ça donne en php a tester donc

Mhhh, si quelqu’un connait comment declarer cette variable, je suis preneur :slight_smile:

private static $nbUsers;

et dans le constructeur ++Users::$nbUsers;

Merci beaucoup "gentil" modo ! :stuck_out_tongue:

Ceci dit, tu m’excuseras, mais j’ai pas compris du tout ce que tu veux en faire de cette variable statique? Compter les utilisateurs connectés sur le site? Dans ce cas, je sais pas si les compter à partir de la bdd (et donc en utilisant un compteur/etc) ne serait pas plus pertinent.