class compte
{
var $id;
var $login;
var $passwd;
// Constructeur: j'initialise l'ID
function compte()
{
$request = mysql_query('SELECT MAX(id) FROM comptes');
$result = mysql_fetch_array($request);
@$result[0]++;
$this->id = $result[0];
}
// Fonction d'ajout: première idée/méthode
function ajoutCompte($flogin, $fpasswd)
{
$this->login = $flogin;
$this->passwd = $fpasswd;
$ajout = mysql_query('INSERT INTO user (login, passwd) VALUES ("'.$this->login.'", "'.$this->passwd.'"');
}
// Fonction d'ajout: seconde idée/méthode
function ajoutCompte2()
{
$ajout = mysql_query('INSERT INTO user (login, passwd) VALUES ("'.$this->login.'", "'.$this->passwd.'"');
}
}
//récup login et passwd $login = $_POST['login']; $passwd = $_POST['passwd']; include "compte.class.php"; $user = new compte; // utilisation de la méthode 1: $user->ajoutCompte($login,$passwd); // ou bien seconde méthode : $user->login = $login; $user->passwd = $passwd; $user->ajoutCompte2();
)class CompteException extends Exception {}
class Compte {
private $login;
private $password;
// private $...; // XXX autre membre privé
private function __construct($login, $password/*, ... // XXX autre partie spécifique à l'user */) {
$this->login = $login;
$this->password = $password;
}
/**
* Crée un nouvel utilisateur
*
* @param string le login
* @param string le password
* @throws CompteException en cas de non création du compte (erreur mySQL, etc)
* @return Compte renvoi le compte crée
*/
public static function create($login, $password) {
if (!mysql_query('INSERT INTO user (login, passwd) VALUES (\''.
mysql_real_escape_string($login).'\', \''.mysql_real_escape_string($password).'\'')) {
throw new CompteException('impossible de créer le compte ' . $login);
}
return new Compte($login, $password);
}
/**
* Recupère un compte utilisateur
*
* @param string le login
* @param string le password
* @throws CompteException en cas de non création du compte (erreur mySQL, etc)
* @return Compte renvoi null si pas de compte retrouvé
*/
public static function getCompte($login, $password) {
if (!($res = mysql_query('SELECT login, passwd FROM user (login, passwd) WHERE login = \''.
mysql_real_escape_string($login).'\' AND passwd = \''.mysql_real_escape_string($password).'\''))) {
throw new CompteException('impossible de créer le compte ' . $login);
}
if ($result = mysql_fetch_assoc($res)) {
return new Compte($result['login'], $result['passwd']);
}
return null;
}
public function getLogin() {return $this->login;}
public function getPassword() {return $this->password;}
}

class CompteException extends Exception {}
)
if ($result = mysql_fetch_assoc($res)) {
return new Compte($result['login'], $result['passwd']);
}
if ($result = mysql_fetch_assoc($res)) {
return new getCompte($result['login'], $result['passwd']);
}
)Et je vois dans ton exemple que le constructeur prend en paramètre login et password... Est ce que l'initialiser avec seulement UN attribut est possible (par exemple dans mon cas, avec l'attribut id) ? Cela change t-il grand chose ? (c'est pour une histoire l'allocation mémoire si je ne me trompe pas ?)
Ensuite, vient l'utilisation de la fonction __construct :
Est-elle équivalente à ce que j'ai tenté de faire en créant function compte{...} ? (donc méthode du même nom que la classe)
Et je vois dans ton exemple que le constructeur prend en paramètre login et password...
Est ce que l'initialiser avec seulement UN attribut est possible (par exemple dans mon cas, avec l'attribut id) ?
Cela change t-il grand chose ? (c'est pour une histoire l'allocation mémoire si je ne me trompe pas ?)
Enfin une dernière question, peut-être la plus absurde...
Mais je ne comprend pas comment fonctionnent ces deux dernières fonctions:
public function getLogin() {return $this->login;}
public function getPassword() {return $this->password;}

fonction create et getCompte: return new Compte($login, $password);


if ($result = mysql_fetch_assoc($res)) {
return new Compte($result['login'], $result['passwd']);
}
return null;
Le constructeur ne doit pas être utilisé directement, c'est tout.
throw new CompteException('impossible de créer le compte ' . $login);
if (!($res = mysql_query('SELECT login, passwd FROM user (login, passwd) WHERE login = \''.
mysql_real_escape_string($login).'\' AND passwd = \''.mysql_real_escape_string($password).'\'')))
{
throw new CompteException('impossible de créer le compte ' . $login);
}
else
{
$result = mysql_fetch_assoc($res));
return new Compte($result['login'], $result['passwd']);
}
}
return null;
) que si la requete à bien fonctionnée, ceci fonctionnera egalement correctement
try {
$obj = Compte::create('toto', '1234');
$obj->methide();
....
}
catch(CompteException $e){
echo $e->getMessage();
}
Dernières astuces
Dernières questions
Forum Hardware
Forum Logiciels