Php et les classes - PHP - Programmation
Marsh Posté le 08-04-2002 à 23:29:40
Oui moi ça me sert pour monitorer les actions de mes fonctions et avoir des variables globales qui ne soient pas globales !
http://www.devshed.com/Server_Side [...] page1.html
Marsh Posté le 09-04-2002 à 00:47:04
Perso je me suis fait ma petite classe pour MySQL en effet et pour gérer un cache aussi, comme ca je me casse jamais la tete
Mais non, sorry je te l'envoie pas, y en a des milliers qui existent, et tu devrais utiliser pear
Marsh Posté le 09-04-2002 à 03:41:01
la programmation objet est un peu une facon de raisoner differement par rapport au language de script traditionelle, c'est un peu comme les fonctions mais poussée a son paroxisme. une classe pour l'acces aux base de données est bien dans le sens ou tu peut ajouter des routines de facons transparente sans avoir a les retapper a chaque fois, par exmple j'ai implementer une function de debug a ma classe de data access et c vraiment pratique. Une fois que ton objet est crée et que les pages l'utilisant aussi, tu peut revenir et ajouter des fonctions a l'objets sans pour autant changer le code de la page, c'est une tres bonne methode plutot que d'arpenter les pages...
Marsh Posté le 09-04-2002 à 13:05:18
C'est clair, c'est la rolls de la programmation, la rolls de la mise à jour...
Si je dois passer un site sur Oracle, a part qqs query a vérifier peut être, les fonctions je dois les changer à un seul endroit et ca tourne
Marsh Posté le 09-04-2002 à 13:11:46
en gros, ya pa kkun ki pourrai m'expliker ce qu'est une classe ? exemple ?
Marsh Posté le 09-04-2002 à 15:49:16
une classe peut etre assimillé a une collection de fonctions et de variable dans un seul package appellé classe. Les variables internes a la classe sont appellées propriétées et les fonctions internes méthodes. Les méthodes sont utilisée pour effectuer des opérations sur les propriétes.
un objet est une instance de la classe, il peut donc y avoir plein d'objet de la meme classe partageant les memes propriétées et méthodes, avec des valeures différentes si necessaire.
un petit exemple pratique un pneu.
class pneu
{
//propriétées
var type
var pression
var usure
//constructeur
function pneu($type='slick'
{
$this->type=$type;
$this->pression=100;
$this->usure=100;
}
//méthodes
function use($pourcentage)
{
$this->usure *= ((100-$pourcentage)/100);
}
function degonfle($pourcentage)
{
$this->gonflage *= ((100-$pourcentage)/100);
}
function gonfle($time)
{
$this->gonflage += (5*$time);
if ($this->gonflage > 100) {$this->gonflage = 100;}
}
function change()
{
$this->usure = 100;
$this->gonflage = 100;
}
}
ca une classe toute simple que je vient d'inventer et que je n'utilise pas alors elle sert pas a grand chose, explication :
la premiere partie definie les propriétée,
la deuxieme est le constructeur, c la function qui est appellé a chaque fois que l'on va crée un objet pneu en faisant:
$myPneu = new pneu();
cela creera un pneu de type slick de base tout neuf et gonflé a block
la troisieme et dernier partie sont les méthodes de la classe, des actions qu'ont peut faire sur le pneu.
a chaque virage par exemple il va s'user et se degonfler, pour un virage leger on fera donc
$myPneu->use(5);
$myPneu->degonfle(5);
si le virage avait été négocier un peu plus vite ou s'il etait plus serré on aurait fait:
$myPneu->use(20);
$myPneu->degonfle(20);
au passage rapide au pit on regonfle les pneu, et disons que la voiture s'arrete 10 secondes on ferra
$myPneu->gonfle(10);
a un passage plus important de la course on deide de carrement changer les pneu on fait:
$myPneu->change();
On peut gerer tout ca juste avec des variables et des fonctions bien entendu mais l'ecriture serait beaucoup plus brouillone, une voiture ayant la plupart du temps 4 roues! et une courses ayant une trentaine de participant....
De plus si je veut complexifier par la suite la description de mon pneu en ajoutant par exmeple une gestion des performance selon son type, usure, gonflage, ou d'autre parametre, je change la classe et je suis sur que tout le reste continuera de fonctionner comme il se doit.
Voila si klk'1 remarque une petite erreur kil en fasse part
[jfdsdjhfuetppo]--Message édité par speedyop--[/jfdsdjhfuetppo]
Marsh Posté le 09-04-2002 à 20:16:50
Heu ben c sympa ms bon moi j'aurais aimé une ptite classe utile du genre se connecter à une base et retourné un requête parce que là comme ça chui (anti)séptique...
Heu sinon ces classes se mettent dans des pages html classiques qu'on inclut dans la page Php où l'on va s'en servir.
Ou alors dans un fichier différent et répondant à des normes très précises comme les javabeans?
Marsh Posté le 09-04-2002 à 20:37:31
Citation : |
Un exemple d'utilisation :
Citation : |
Ensuite tu peux faire par exemple si tu fais un forum une classe pour les news, une pour les topics,une pour les posts ect...
En ASP on peut faire des classes ?
[jfdsdjhfuetppo]--Message édité par tanguy--[/jfdsdjhfuetppo]
Marsh Posté le 09-04-2002 à 21:21:06
oui en asp on peu faire des classes en vb.
sinon pour aider a la compréhension pour les autres ton exemple il est a l'interieur d'une autre classe non ($this-> )?
voici ma classe de connexion moi :
class db
{
var $host;
var $user;
var $pass;
var $name;
var $nb_row=0;
var $row;
var $lastid;
var $query;
var $nb_query=0;
//constructeur
function db($host,$user,$pass,$name)
{
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->name = $name;
mysql_connect($host,$user,$pass) or die("le serveur mySQL ne réponds pas" );
mysql_select_db($name) or die("La base demandée n'existe pas" );
}
//clause select d'une requette
function select($query,$comment="" )
{
global $hopdebug;
$timer = new timer();
$this->query = $query;
$result =$this->query($query);
$this->nb_row = mysql_num_rows($result);
for ($x=0;$x<$this->nb_row;$x++)
{
$this->row[$x] = mysql_fetch_object($result);
}
$this->speed = $timer->stop(10);
$this->nb_query++;
$this->debug("<U>".$comment."</U> <I>(nombre d'enregistrement retournés : ".$this->nb_row." )</I>" );
}
//clause insert d'une requette
function insert($query,$comment="" )
{
$timer = new timer();
$this->query = $query;
$result = $this->query($query);
$this->lastid = mysql_insert_id();
$this->speed = $timer->stop(10);
$this->nb_query++;
$this->debug("<U>".$comment."</U> <I>(dernier enregistrement : id=".$this->lastid." )</I>" );
}
//clause update
function update($query,$comment="" )
{
$timer = new timer();
$this->query = $query;
$result = $this->query($query);
$this->speed = $timer->stop(10);
$this->nb_query++;
$this->debug("<U>".$comment."</U>" );
}
//function a usage interne
function debug($comment="" )
{
global $hopdebug;
if ($hopdebug==unevaleurdefinieparvous) {debug("<HR>query #".$this->nb_query." : ".$comment."<BR>".$this->query."<BR>".$this->speed." sec<HR>" );}
}
function query($query)
{
$result = mysql_query($query) or die("la requette est invalide :<BR><B>#".$query."#<B><BR>".mysql_error());
return $result;
}
}
pour ceux qui ont le courage de lire attentivement ils remarqueront que ca fait appelle a klk functions et classes exterenes que je vous mettrait plus tard peut etre si vous etes sage
Marsh Posté le 09-04-2002 à 22:08:50
Merci bcp je me creuserai la tête sur cela dès demain.
Sinon c'est dans la page php directe ou ailleurs (page appellé avec un include ou fichier de type différent).
Marsh Posté le 09-04-2002 à 23:29:30
LA classe email ultime (pas encore trouvé mieux)
http://phpmailer.sourceforge.net
sinon une class super utile c'est pour générer des formulaires (avec le type, longueur, valeur possibles et interdites comme propriétés) ça évite les traitements longs à la validation
[jfdsdjhfuetppo]--Message édité par Sh@rdar--[/jfdsdjhfuetppo]
Marsh Posté le 08-04-2002 à 23:25:04
Bon alors la question idiote du jour qui demande une réponse kan même pas trop idiote...
Ca vous sert vraiment les classes et la POO en général en Php? Quelqu'un peu m'envoyer une classe Php et une page s'en servant pour faire un truc du genre se connecter à une bdd MySQL et en tirer quelques données.
Ben soit vous me l'envoyez sur mon e-mail : eric.ledonge@free.fr; soit vous la postez sur le forum en me la commentant pour me montrer comment vous êtes vachement intelligent.
Merci