[PHP5][POO][IMAP] UNE CLASSE POUR LIRE DES MAILS EN IMAP DEPUIS UNE BAL EXISTAN
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 2015
-
23 avril 2006 à 13:54
Nifhell
Messages postés48Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention23 avril 2006
-
23 avril 2006 à 22:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Nifhell
Messages postés48Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention23 avril 2006 23 avril 2006 à 22:08
Et remplacer les eregi par des strpos (comme conseillé effectivement dans le manuel php...)
Nifhell
Messages postés48Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention23 avril 2006 23 avril 2006 à 22:04
Voilà, mis à jour ;) (mis en publique les attributs parus necessaires, enfin je crois...)
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 23 avril 2006 à 21:43
Ce que je voulais dire, c'est que ca porte pas atteinte au code pur :)
Tu peux faire :
<?php
public $host;
public function __construct($host) {
$this->host = $host;
}
?>
Puis, pour une raison où une autre, faire :
$mysql = new mysql('host.com');
$mysql->host = 'host.fr';
Pas besoin de rajouter une méthode en plus pour faire :
$mysql->setHost('host.fr');
ou alors
$mysql->changeoption('host', 'host.fr'); <== qui est encore plus lent !
Voila pourquoi je dis qu'il ne faut pas avoir peur du "public" et faire des méthodes dans le vent :)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 23 avril 2006 à 21:12
"Alors que si j'ai envie de changer d'hote, de login ou de pass ==> $mysql->host = 'new_host';"
Pourquoi changer d'hôte ? quand t'as plusieurs bases à gérer tu changes juste la base, sinon si t'as plusieurs bdd à gérer sur deux serveurs distincts (genre réplication) là peut-être oui (et encore je pense que ça se fait plutôt niveau logiciel et pas PHP ce genre de choses, inutile de perdre des perfs alors qu'il n'y a qu'un dossier "datas" à copier
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 23 avril 2006 à 21:06
"FhX > pour les attributs publics je pense que tout ce qui est host et connexion devrait être fait soit dans la classe soit dans le constructeur, ça éviterait justement de se balader avec ça :-)"
Le host et tout peut être publique... ca ne génera rien du tout. Par contre, le lien de connection $link DOIT être privé et DOIT resté dans la classe, car celui ci n'a pas besoin d'être utilisé en dehord.
Alors que si j'ai envie de changer d'hote, de login ou de pass ==> $mysql->host = 'new_host';
Suffit de faire des tests avant la connection à la base de donnée... généralement c'est ce qu'on fait quand la classe est bien faite :)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 23 avril 2006 à 18:37
bon j'ai noté 10 par erreur m'enfin c'est pas grave...
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 23 avril 2006 à 18:35
au fait : 9/10 (dix quand les bugs seront corrigés) ;-)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 23 avril 2006 à 18:34
strpos sera encore plus rapide, par contre il arrive qu'ereg soit plus rapide (testé et approuvé sur certaines fonctions de mon site).
Sinon c'est un bon code malgré les quelques bugs :-)
FhX > pour les attributs publics je pense que tout ce qui est host et connexion devrait être fait soit dans la classe soit dans le constructeur, ça éviterait justement de se balader avec ça :-)
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 23 avril 2006 à 13:57
#else {
# if (eregi("html", $struct->subtype)) {
# # HTML
# $part_needed = "body";
# $part_encoding = $struct->encoding;
# $html_entity = 1;
# }
# else {
# $part_needed = "body";
# $part_encoding = $struct->encoding;
# }"
Oublié vite fait, c'est passé à travers :p
Ca sert à rien ce gros if() :p
<?php
} else {
$part_needed = "body";
$part_encoding = $struct->encoding;
if (eregi("html", $struct->subtype)) $html_entity = 1;
// Et encore, eregi ca fait lourd pour ca ==> preg_match() est 10 fois plus rapide pour ce genre de chose.
// Voir même avec les fonctions str_* ! :p
}
?>
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 23 avril 2006 à 13:54
Voui, y'a un bug :p
( private $m_debug = true; )
# public function debug($b = true) {
# $this->m_debug = $b;
# }
Méthode qui ne sert à rien :) Met $m_debug en public et retire la méthode. $m_debug est un bool, donc autant la laisser public. C'est celui qui va utiliser ta classe qui fera :
$imap = new imap_class; // Me rappele plus du nom de ta classe :p
$imap->m_debug = TRUE;
// $imap->m_debug = FALSE;
Faut pas avoir peur des propriétés public surtout :)
Pareil pour $host, $login, $pass... autant mettre ca en public, y'a rien de bien choquant que de faire :
$imap->host = 'xxx';
$imap->user = 'yyy';
$imap->passwd = 'zzz';
Car si t'as un tableau à l'extérieur :
$array array('host'> 'xxx', 'user' => 'yyy', 'passwd' => 'zzz');
foreach ( $array as $key=>$val ) {
$imap->$key = $val;
}
Et hop, c'est vite reglé :)
Donc autant mettre ca en public, au final c'est l'utilisateur de ta classe qui va être heureux :)
23 avril 2006 à 22:08
23 avril 2006 à 22:04
23 avril 2006 à 21:43
Tu peux faire :
<?php
public $host;
public function __construct($host) {
$this->host = $host;
}
?>
Puis, pour une raison où une autre, faire :
$mysql = new mysql('host.com');
$mysql->host = 'host.fr';
Pas besoin de rajouter une méthode en plus pour faire :
$mysql->setHost('host.fr');
ou alors
$mysql->changeoption('host', 'host.fr'); <== qui est encore plus lent !
Voila pourquoi je dis qu'il ne faut pas avoir peur du "public" et faire des méthodes dans le vent :)
23 avril 2006 à 21:12
Pourquoi changer d'hôte ? quand t'as plusieurs bases à gérer tu changes juste la base, sinon si t'as plusieurs bdd à gérer sur deux serveurs distincts (genre réplication) là peut-être oui (et encore je pense que ça se fait plutôt niveau logiciel et pas PHP ce genre de choses, inutile de perdre des perfs alors qu'il n'y a qu'un dossier "datas" à copier
23 avril 2006 à 21:06
Le host et tout peut être publique... ca ne génera rien du tout. Par contre, le lien de connection $link DOIT être privé et DOIT resté dans la classe, car celui ci n'a pas besoin d'être utilisé en dehord.
Alors que si j'ai envie de changer d'hote, de login ou de pass ==> $mysql->host = 'new_host';
Suffit de faire des tests avant la connection à la base de donnée... généralement c'est ce qu'on fait quand la classe est bien faite :)
23 avril 2006 à 18:37
23 avril 2006 à 18:35
23 avril 2006 à 18:34
Sinon c'est un bon code malgré les quelques bugs :-)
FhX > pour les attributs publics je pense que tout ce qui est host et connexion devrait être fait soit dans la classe soit dans le constructeur, ça éviterait justement de se balader avec ça :-)
23 avril 2006 à 13:57
# if (eregi("html", $struct->subtype)) {
# # HTML
# $part_needed = "body";
# $part_encoding = $struct->encoding;
# $html_entity = 1;
# }
# else {
# $part_needed = "body";
# $part_encoding = $struct->encoding;
# }"
Oublié vite fait, c'est passé à travers :p
Ca sert à rien ce gros if() :p
<?php
} else {
$part_needed = "body";
$part_encoding = $struct->encoding;
if (eregi("html", $struct->subtype)) $html_entity = 1;
// Et encore, eregi ca fait lourd pour ca ==> preg_match() est 10 fois plus rapide pour ce genre de chose.
// Voir même avec les fonctions str_* ! :p
}
?>
23 avril 2006 à 13:54
( private $m_debug = true; )
# public function debug($b = true) {
# $this->m_debug = $b;
# }
Méthode qui ne sert à rien :) Met $m_debug en public et retire la méthode. $m_debug est un bool, donc autant la laisser public. C'est celui qui va utiliser ta classe qui fera :
$imap = new imap_class; // Me rappele plus du nom de ta classe :p
$imap->m_debug = TRUE;
// $imap->m_debug = FALSE;
Faut pas avoir peur des propriétés public surtout :)
Pareil pour $host, $login, $pass... autant mettre ca en public, y'a rien de bien choquant que de faire :
$imap->host = 'xxx';
$imap->user = 'yyy';
$imap->passwd = 'zzz';
Car si t'as un tableau à l'extérieur :
$array array('host'> 'xxx', 'user' => 'yyy', 'passwd' => 'zzz');
foreach ( $array as $key=>$val ) {
$imap->$key = $val;
}
Et hop, c'est vite reglé :)
Donc autant mettre ca en public, au final c'est l'utilisateur de ta classe qui va être heureux :)