begin process at 2012 05 27 17:57:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > PHP5 - CLASSE DE NEWS ET DE COMMENTAIRES

PHP5 - CLASSE DE NEWS ET DE COMMENTAIRES


 Information sur la source

Note :
8,5 / 10 - par 4 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :poo, php5, classe, news, commentaires Niveau :Initié Date de création :06/08/2006 Vu :10 258

Auteur : FhX

Ecrire un message privé
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Bonjour bonjour :)

Bon je tiens à rassurer tout le monde, aujourd'hui je fais quelque chose de pas bien nouveau. En faites, j'avais fait y'a longtemps une classe de news mais c'était pas génial génial. L'interfacage était pourris bref... je refais quelque chose de nouveau.

Au menu ?
Une classe d'abstraction pour gérer les méthodes de bases aux classes filles de news et de commentaires.
2 interfaces : une pour les news, l'autre pour les commentaires (juste pour uniformiser).
2 classes indépendantes :
- NewsObject
- CommentObject
1 classe fille qui hérite de mon abstraction pour les news.
1 autre classe fille pour les commentaires.

Voici donc le code (y'a rien de compliquer, alors j'ai pas pris la peine de le commenter pour le moment...) :

Source

  • <?php
  • class NewsObject {
  • public $titre = NULL;
  • public $resume = NULL;
  • public $content = NULL;
  • public $id = NULL;
  • public $date = NULL;
  • public $date_update = NULL;
  • public $commCount = NULL;
  • public $lastcomm = NULL;
  • public function __construct($array=NULL) {
  • if ( is_array($array) ) {
  • foreach ($array as $key=>$val ) {
  • if ( property_exists($this, $key) ) $this->$key = $val;
  • }
  • }
  • $this->id = (int) $this->id;
  • }
  • public function CheckFields() {
  • if ( !isset($this->titre) ) throw new Exception ('Le champ titre n\'est pas rempli !');
  • if ( !isset($this->content) ) throw new Exception ('Le champ contenu n\'est pas rempli !');
  • }
  • }
  • class CommentObject {
  • public $login = NULL;
  • public $id = NULL;
  • public $date = NULL;
  • public $content = NULL;
  • public function __construct($array=NULL) {
  • if ( is_array($array) ) {
  • foreach ($array as $key=>$val ) {
  • if ( property_exists($this, $key) ) $this->$key = $val;
  • }
  • }
  • $this->id = (int) $this->id;
  • }
  • }
  • interface iNews {
  • public function GetUniqueNews($newsID);
  • public function GetMultipleNews($start, $limit);
  • public function GetNextNewsID();
  • public function CountAllNews();
  • public function AddNews( NewsObject $objet);
  • public function DeleteNews($newsID);
  • public function UpdateNews( NewsObject $objet);
  • }
  • interface iComment {
  • public function GetCommentsFromNewsID( NewsObject $objet );
  • public function DeleteComment($commentID);
  • }
  • abstract class Factory {
  • protected $db;
  • protected $_option = array(
  • 'outputMethod' => 'ToObject');
  • public $flag = FALSE;
  • protected $childname;
  • public function __construct() {
  • $this->db = mysql::GetInstance();
  • }
  • public function SetOutputMethod($methodname) {
  • switch ( strtolower($methodname) ) {
  • case 'object' :
  • $this->_option['outputMethod'] = 'ToObject';
  • break;
  • case 'xml' :
  • $this->_option['outputMethod'] = 'ToXML';
  • break;
  • default :
  • throw new Exception($methodname.' n\'est pas reconnu en tant que méthode de sortie !');
  • }
  • }
  • abstract protected function ToObject($array);
  • abstract protected function ToXML($array);
  • }
  • class NewsFactory extends Factory implements iNews {
  • public function __construct() {
  • parent::__construct();
  • }
  • public function GetUniqueNews($newsID) {
  • $this->db->prepare('SELECT
  • id, titre, content, resume,
  • DATE_FORMAT(date,"%d-%m-%Y à %Hh%i") as date,
  • DATE_FORMAT(dateupdate,"%d-%m-%Y à %Hh%i") as date_update
  • FROM
  • news
  • WHERE
  • id = {1}',
  • (int) $newsID);
  • $this->db->query();
  • return $this->{$this->_option['outputMethod']}( $this->db->fetch_array() );
  • }
  • public function GetMultipleNews($start, $limit) {
  • if ( !$this->flag ) {
  • $this->db->prepare('SELECT
  • news.id, news.titre, news.resume, news.content,
  • DATE_FORMAT(news.date,"%d-%m-%Y à %Hh%i") as date,
  • DATE_FORMAT(news.dateupdate,"%d-%m-%Y à %Hh%i") as date_update,
  • COUNT(commentaires.id) as commCount,
  • DATE_FORMAT( MAX(commentaires.date), "%d/%m/%Y") as lastcomm
  • FROM
  • news
  • LEFT JOIN
  • commentaires ON news.id = commentaires.id_news
  • GROUP BY
  • news.id
  • ORDER BY
  • news.id DESC
  • LIMIT {1}, {2}',
  • (int) $start, (int) $limit);
  • $this->db->query();
  • $this->flag = TRUE;
  • }
  • return $this->{$this->_option['outputMethod']}( $this->db->fetch_array() );
  • }
  • public function GetNextNewsID() {
  • $this->db->query('SELECT MAX(id) + 1 FROM news');
  • $data = $this->db->fetch_row();
  • return ( (int) $data[0] );
  • }
  • public function AddNews( NewsObject $objet) {
  • $objet->CheckFields();
  • $this->db->prepare("INSERT INTO news (titre, resume, content, date) VALUES ('{1}', '{2}', '{3}', NOW() )",
  • $objet->titre, $objet->resume, $objet->content);
  • $this->db->query();
  • if ( $this->db->affected_rows() === 1 ) {
  • return $this->db->insert_id();
  • } else {
  • return false;
  • }
  • }
  • public function DeleteNews($newsID) {
  • $this->db->prepare('DELETE FROM news WHERE id = {1}', (int) $newsID);
  • $this->db->query();
  • return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
  • }
  • public function UpdateNews( NewsObject $objet) {
  • $objet->CheckFields();
  • $this->db->prepare("UPDATE news SET content = '{1}', resume = '{2}', titre = '{3}' WHERE id = {4}",
  • $objet->content, $objet->resume, $objet->titre, $objet->id);
  • $this->db->query();
  • return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
  • }
  • public function CountAllNews() {
  • $this->db->query('SELECT COUNT(id) FROM news');
  • $this->db->query();
  • $data = $this->db->fetch_row();
  • return ( (int) $data[0] );
  • }
  • protected function ToObject($array) {
  • if ( $array === FALSE ) {
  • $this->flag = FALSE;
  • return FALSE;
  • } else {
  • return new NewsObject($array);
  • }
  • }
  • protected function ToXML($array) {
  • if ( $array === FALSE ) {
  • $this->flag = FALSE;
  • return FALSE;
  • }
  • $doc = new DOMDocument('1.0');
  • $root = $doc->CreateElement('news');
  • foreach ( $array as $key=>$val ) {
  • $newElem = $doc->createElement($key, $val);
  • $root->appendChild($newElem);
  • }
  • $doc->appendChild($root);
  • return $doc->saveHTML();
  • }
  • }
  • class CommentFactory extends Factory implements iComment {
  • public function __construct() {
  • parent::__construct();
  • }
  • public function GetCommentsFromNewsID( NewsObject $objet ) {
  • $this->db->prepare("SELECT
  • id, login, content, date, ip
  • FROM
  • commentaires
  • WHERE
  • id_news = {1}",
  • (int) $objet->id);
  • $this->db->query();
  • return $this->{$this->_option['outputMethod']}( $this->db->fetch_array() );
  • }
  • public function DeleteComment($commentID) {
  • $this->db->prepare('DELETE FROM commentaires WHERE id = {1}', (int) $commentID);
  • $this->db->query();
  • return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
  • }
  • protected function ToObject($array) {
  • if ( $array === FALSE ) {
  • $this->flag = FALSE;
  • return FALSE;
  • } else {
  • return new CommentObject($array);
  • }
  • }
  • protected function ToXML($array) {
  • if ( $array === FALSE ) {
  • $this->flag = FALSE;
  • return FALSE;
  • }
  • $doc = new DOMDocument('1.0');
  • $root = $doc->CreateElement('comment');
  • foreach ( $array as $key=>$val ) {
  • $newElem = $doc->createElement($key, $val);
  • $root->appendChild($newElem);
  • }
  • $doc->appendChild($root);
  • return $doc->saveHTML();
  • }
  • }
  • ?>
<?php
class NewsObject {

 public $titre = NULL;
 public $resume = NULL;
 public $content = NULL;
 public $id = NULL;
 public $date = NULL;
 public $date_update = NULL;
 public $commCount = NULL;
 public $lastcomm = NULL;
 
 
 public function __construct($array=NULL) {
 	
  if ( is_array($array) ) {
  	   foreach ($array as $key=>$val ) {
  	   	        if ( property_exists($this, $key) ) $this->$key = $val;
  	   }   
  }
 
  $this->id = (int) $this->id;
 }	
 
 
 public function CheckFields() {
  if ( !isset($this->titre) )   throw new Exception ('Le champ titre n\'est pas rempli !');
  if ( !isset($this->content) ) throw new Exception ('Le champ contenu n\'est pas rempli !');
 }

}

class CommentObject {
	
 public $login = NULL;
 public $id = NULL;
 public $date = NULL;
 public $content = NULL;
 
 public function __construct($array=NULL) {
 	
  if ( is_array($array) ) {
  	   foreach ($array as $key=>$val ) {
  	   	        if ( property_exists($this, $key) ) $this->$key = $val;
  	   }   
  }
 
  $this->id = (int) $this->id;
 }	
 
}

interface iNews {
 public function GetUniqueNews($newsID);
 public function GetMultipleNews($start, $limit);
 public function GetNextNewsID();
 public function CountAllNews();
 public function AddNews( NewsObject $objet);
 public function DeleteNews($newsID); 
 public function UpdateNews( NewsObject $objet);  
}

interface iComment {
 public function GetCommentsFromNewsID( NewsObject $objet );
 public function DeleteComment($commentID);
}


abstract class Factory {
 protected $db;
 protected $_option = array(
              'outputMethod' => 'ToObject');
 public $flag = FALSE;	
 protected $childname;
	
 public function __construct() {
  $this->db = mysql::GetInstance();	
 }
 
 public function SetOutputMethod($methodname) {
 	
  switch ( strtolower($methodname) ) {
  	case 'object' :
  		  $this->_option['outputMethod'] = 'ToObject';
  		  break;
  	case 'xml' :
  		  $this->_option['outputMethod'] = 'ToXML';
  		  break;
  	default :
  		  throw new Exception($methodname.' n\'est pas reconnu en tant que méthode de sortie !');
  }
 	
 }
 
 abstract protected function ToObject($array);
 abstract protected function ToXML($array);
 
}



class NewsFactory extends Factory implements iNews {
  	
 public function __construct() {	
  parent::__construct(); 	
 }
 
 public function GetUniqueNews($newsID) {
 	
  $this->db->prepare('SELECT
                       id, titre, content, resume,
                       DATE_FORMAT(date,"%d-%m-%Y à %Hh%i") as date,
                       DATE_FORMAT(dateupdate,"%d-%m-%Y à %Hh%i") as date_update
                      FROM
                       news
                      WHERE
                       id = {1}',
                      (int) $newsID);
  $this->db->query();
  return $this->{$this->_option['outputMethod']}( $this->db->fetch_array() );
   	
 }

 public function GetMultipleNews($start, $limit) {
 	
   if ( !$this->flag ) {
         $this->db->prepare('SELECT
   		        	          news.id, news.titre, news.resume, news.content,
   		          		      DATE_FORMAT(news.date,"%d-%m-%Y à %Hh%i") as date,
   		           		      DATE_FORMAT(news.dateupdate,"%d-%m-%Y à %Hh%i") as date_update,
   		           		      COUNT(commentaires.id) as commCount,
   		            		  DATE_FORMAT( MAX(commentaires.date), "%d/%m/%Y") as lastcomm
   		            	     FROM
   		            		  news
   		           			 LEFT JOIN
   		               		  commentaires ON news.id = commentaires.id_news
   		             		 GROUP BY
   		                      news.id
   		             	     ORDER BY
   		             		  news.id DESC
   		             	     LIMIT {1}, {2}',
	                 		  (int) $start, (int) $limit); 	 
        $this->db->query();
        $this->flag = TRUE;
   }
  
  return $this->{$this->_option['outputMethod']}( $this->db->fetch_array() );
 	
 	
 }
 
 public function GetNextNewsID() {
 
  $this->db->query('SELECT MAX(id) + 1 FROM news');
  $data = $this->db->fetch_row();
  return ( (int) $data[0] );
  
 }
 
 
 public function AddNews( NewsObject $objet) {

  $objet->CheckFields();
   
  $this->db->prepare("INSERT INTO news (titre, resume, content, date) VALUES ('{1}', '{2}', '{3}', NOW() )",
                      $objet->titre, $objet->resume, $objet->content);
  $this->db->query();	
  
   if ( $this->db->affected_rows() === 1 ) {       
		return $this->db->insert_id();
   } else {
        return false;
   }
   	
 }
 
 public function DeleteNews($newsID) {
  
  $this->db->prepare('DELETE FROM news WHERE id = {1}', (int) $newsID);
  $this->db->query();	
  
  return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
  
 }
 
 public function UpdateNews( NewsObject $objet) {

  $objet->CheckFields();
  
  $this->db->prepare("UPDATE news SET content = '{1}', resume = '{2}', titre = '{3}' WHERE id = {4}",
                    $objet->content, $objet->resume, $objet->titre, $objet->id);
  $this->db->query();	
  
  return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;       
   	
 }
 
 public function CountAllNews() {
 	
  $this->db->query('SELECT COUNT(id) FROM news');
  $this->db->query();

  $data = $this->db->fetch_row();
  return ( (int) $data[0] );
    	
 }
 
 protected function ToObject($array) { 
 	
   if ( $array === FALSE ) {
   	    $this->flag = FALSE;
   	    return FALSE;
   } else {
   	    return new NewsObject($array);
   }
	
 }
 
 protected function ToXML($array) {

   if ( $array === FALSE ) {
   	    $this->flag = FALSE;    
   	    return FALSE;	
   }
 
  $doc = new DOMDocument('1.0');
  $root = $doc->CreateElement('news');
  
   foreach ( $array as $key=>$val ) {
             $newElem = $doc->createElement($key, $val);
             $root->appendChild($newElem);      
   }
   
  $doc->appendChild($root);
  
  return $doc->saveHTML();
  
 }
 
}

class CommentFactory extends Factory implements iComment {
	
 public function __construct() {
  parent::__construct();
 }

 public function GetCommentsFromNewsID( NewsObject $objet ) {
 	
  $this->db->prepare("SELECT
                       id, login, content, date, ip
                      FROM
                       commentaires
                      WHERE
                       id_news = {1}",
                      (int) $objet->id);
 $this->db->query();

 return $this->{$this->_option['outputMethod']}( $this->db->fetch_array() );
 	
 }
 
 public function DeleteComment($commentID) {
  
  $this->db->prepare('DELETE FROM commentaires WHERE id = {1}', (int) $commentID);
  $this->db->query();	
  
  return ( $this->db->affected_rows() === 1 ) ? TRUE : FALSE;
  
 }
 
 protected function ToObject($array) { 
 	
   if ( $array === FALSE ) {
   	    $this->flag = FALSE;
   	    return FALSE;
   } else {
   	    return new CommentObject($array);
   }
	
 }
 
 protected function ToXML($array) {

   if ( $array === FALSE ) {
   	    $this->flag = FALSE;    
   	    return FALSE;	
   }
 
  $doc = new DOMDocument('1.0');
  $root = $doc->CreateElement('comment');
  
   foreach ( $array as $key=>$val ) {
             $newElem = $doc->createElement($key, $val);
             $root->appendChild($newElem);      
   }
   
  $doc->appendChild($root);
  
  return $doc->saveHTML();
  
 }
 
}
?>

 Conclusion

Vous allez me dire, l'est gentil... mais ca marche comment ?
Alors voila :
<?php
try {
  $NewsFactory = new NewsFactory;
  
  $news = $NewsFactory->GetUniqueNews( (int) $_GET['id'] ); // Imaginons qu'on récupère l'ID d'une news via un GET.
  echo $news->id;
  echo $news->titre;
  echo $news->content;
  // etc...
} catch ( Exception $e ) { // Sait on jamais !
  echo $e->getMessage();
}
?>

Pareil pour les commentaires !
C'est ultra simple, ultra modulaire, et ca peut s'intégrer partout !
Si vous voulez une sortie XML, il suffit de le spécifier via : public function SetOutputMethod($methodname);

Toujours aussi compliqué ? Mais non... allez suffit de fouiller un peu =)


 Sources du même auteur

PHP5 - UTILISATION DES ITÉRATEURS ET DE LA RÉFLECTION.
PHP 5 - CLASSE MYSQL (STYLE MYSQLI)
[PHP5] CLASSE DATE/HEURE
PHP5 - GESTION DE MODULES EN OBJET
PHP5 - CLASSE DE GESTION DE MODULES

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip [POO][PHP5]UN SITE MULTILANGUE VIA XML par destinyfr
Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS par ranouf
Source avec Zip CLASSE NEWS par mrjulien
[PHP5] CLASSE DE NEWS par FhX

Commentaires et avis

Commentaire de audayls le 06/08/2006 23:32:57

Salut,
Venant de toi je suis sur que c'est extrement bien codé !
Par contre j'ai juste une question: je connais pas bien les classes mais penses tu qu'il est possible de dévellopper cette classe pour PHP 4 ?

Commentaire de FhX le 07/08/2006 00:36:15

Oui, faudrait juste renommer le constructeur, virer les exceptions, enlever les public/private/protected et ca marchera aussi bien :)

Ah oui, faut aussi modifier l'abstraction de classe et enlever les interfaces aussi =)

Commentaire de audayls le 07/08/2006 17:36:40

Okay, c'est bon çà je sais faire ! (N'empeche qu'il va faloir que j'apprenne les classes un jour moi - -')
Par contre, tu utilises MySQL mais tu n'as pas indiqué les tables à créer.

Commentaire de Garno le 08/08/2006 02:46:48

Salut,
Comme d'habitude la qualité est au rendez-vous et dans mon cas je vois une véritable innovation d'un côté de la programmation orienté objet auquel je n'avais pas du tout penser. L'idée d'utilisé une classe de la même façon qu'une "struct" en c++ est bien joué et je crois que je vais l'implenter dans plusieur de mes projets puisque sa me donne bien des idées :)

Malheureusement ta classe n'est pas exploitable dans l'état où elle est puisqu'il nous manque beaucoup d'informations importante tels la structure des tables mysql et surtout ta classe de base de données. Par contre c'est peut-être un plus puisque sa va obliger le monde à comprendre le fonctionnement exacte pour l'adapter à leur propre script ;)

Finalement, je ne vois pas l'intérêt d'avoir une interface dans cet exemple-ci puisque tu as seulement 1 classe pour 1 interface donc totalement inutile (je me trompe ??). De mon point de vu cela n'a pas de sens. Bref, très bonne source comme il s'en fait peu depuis quelques temps. Continue ton travail puisque sa m'aide bcp de l'évolution de ma programmation :D

Commentaire de FhX le 08/08/2006 13:19:42

En effet, je n'ai pas mis les tables SQL.
Chacun peut avoir sa structure de table. Je pars dans le principe que celui qui utilise une classe sait comment fonctionne SQL. Et de plus, il n'y a que les requètes à modifier et le noms des méthodes est suffisament évocateur pour ne pas se tromper :)

Ma classe de DB est sur le site de PHPCS. De toute facon, classe ou pas classe, celle ci est suffisament compréhensible pour tout le monde. Le nom des méthodes est la même que pour les fonctions style mysql_query(), mysql_fetch_array() bref... je pense être compréhensible la dessus.

Concernant l'interface, en effet y'a aucun intérêt ici. Je l'ai mis pour bien faire voir qu'une interface sert de pont entre le dev et la classe. Je pourrais faire une autre classe qui hérite de Factory mais au lieu de chercher mes informations dans une base de donnée SQL, je pourrais le faire via un fichier XML. Et la, je peux ré-utiliser mon interface facilement :)

Et puis je vais pas macher tout le travail non plus =)
Le jour où je veux le faire, je présenterai un projet complet et pas qu'un module de news :p

Commentaire de Garno le 10/08/2006 01:01:29

Salut,

J'ai regarder de plus près ton code et sa confirme ce que je disais .. c'est une très bonne source. De plus, j'ai remarquer que tu récupérais ton object mysql via une fonction MySQL::getInstance(). Voilà quelques temps que j'essai de faire quelque chose du genre afin de pouvoir utiliser ma classe de base de données un peu partout à travers mes classes et je n'y arrive absolument pas. Est-ce qu'il serait possible d'avoir le code exacte de cette fonction ?? :)))

Merci d'avance

Commentaire de Garno le 10/08/2006 01:18:31

Mouais ... encore une fois j'ai parlé trop vite :) en m'y remettant un peu j'y suis parvenu. En fait ce n'est pas très complexe. Voici ce que sa donne :

static public function getInstance()
{
if(empty(self::$instance))
self::$instance = new self();

return self::$instance;
}

Commentaire de FhX le 10/08/2006 02:33:36

if ( !isset(self::$instance) ) <== et pas empty() :p
Car dans ta déclaration en début de classe :
static private $instance = NULL;
et pas : static private $instance = '';

:)

Tu as parfaitement compris comment ca marche :) Cette technique s'appele le Singleton.
Très efficace pour une instance unique et globale d'un objet =)

Commentaire de guill76 le 15/08/2006 02:14:01

Salut,
En voyant ce code il m'est venu une interrogation dont je vous fais part (et c'est en exclusivité sur code sources :) ):  

FHX: J'ai remarqué que tu utilisais souvent(int)devant la fonction pour effectuer une conversion de type (tu as certainement raison au niveau syntaxique et portabilité du code). Mais tu n'es pas sans ignorer que php autorise dans une fonction un retour sur plusieurs types.
Exemple la fonction fopen peut retourner l'identifiant en cas de succès ou false an cas d'echec.
Que penses d'une astuce(que j'ai découverte, mais que d'autres utilisent surement) qui consiste à ajouter 0 au retour d'une fonction?
Exemple:
J'ai une fonction qui retourne des nombres(entiers ou flottants) lus dans un fichiers donc au format string, si la fonction echoue elle renvoie false.
Avec l'astuce en question je peux faire ce contrôle qui sera toujours fiable :
du coup ici je peux effectuer [evluation+transtypage+affectation+controle] en une ligne(4 instructions ):

if (false!==($valeur=fonction('bidule')+0)) =>(car false + 0 === false)

or, avec ce contrôle (4 instructions aussi)
if (false!==($valeur=(int)fonction('bidule'))) //toujours vrai

si j'utilise cette conversion qui semble plus rigoureuse , la dernièe condition sera toujours vraie, donc le contrôle ne sera plus jamais fiable, ou alors il faut rajouter une instruction supplémentaire:

if(false!==($retour = fonction('bidule'))
$valeur = (int)$retour;
donc, du coup, 5 instructions au lieu de 4;

Dans ce cas autant opter pour l'astuce (+0), non?
      

Commentaire de BruNews le 15/08/2006 10:03:10 administrateur CS

GUILL76 >
Il faut éviter les tournures à rallonge qui n'apportent rien d'autre que des erreurs:
"... tu n'es pas sans ignorer ..."
Ton interlocuteur se voit donc traité d'ignorant alors que:
"tu sais certainement" supprimait toute ambiguïté.
Bonne continuation.

Commentaire de guill76 le 15/08/2006 15:46:31

BrunNews : je te cause ? , et d'ailleurs il me semble que ma tournure est une forme de respect.
Je ne sais pas qui tu es, mais permets-moi de te dire que, par ta remarque, tu rernifles le faux jeton à 100 m: Je n'ai aucune  leçons de Français à recevoir de quiconque et encore moins de toi. Alors bonnne continuation, (à jamais, t'inquiètes pas!, je l'espère aussi.)        

Commentaire de BruNews le 15/08/2006 19:40:17 administrateur CS

Il y a des tournures qui sont surtout une occasion d'étaler une ignorance crasse. Au lieu de t'y complaire tu aurais pu par exemple passer cela sur l'heure tardive ou que sais-je encore.
Tout le monde peut apprendre s'il le veut et de nimporte qui, tout est affaire de choix.

Je t'ai parlé tout à fait courtoisement, tu seras donc prié de faire de même.
Les règles du savoir vivre s'appliquent sur CS, si elles ne te conviennent pas, suffit de me le dire et ton compte ainsi que tes contributions seront enlevées illico.

Commentaire de guill76 le 15/08/2006 20:18:35

Il me semble que c'est pas le lieu ici pour faire ce genre de remarque, Ok t'es peut - être un admin de cs mais bon ça ne te dispense pas d'être pertinent dans tes remarques.
Mon post était juste ici pour livrer une réflexion, je suis encore en train d'apprendre le PHP mais je ne me sens en aucun cas, étaler une "ignorance crasse". Peut être que je n'aurais jamais posté cette reflexion si je l'avais eue à un autre moment (qu'à 2 heure du mat hier, c'est vrai).Mais bon je vois pas en quoi j'ai traîté FHX d'ignorant dans ma tournure de phrases (si tu y vois une attaque c'est ton problème et de toute façon ce n'est pas à toi d'intervenir à sa place)      

Commentaire de Bidou le 15/08/2006 20:37:48 administrateur CS

Allez ces Messieurs, on se calme un peu...

Commentaire de FhX le 21/08/2006 14:11:13

Si j'utilise l'opérateur de typage, c'est parce que je veux être sur du type de ma variable :)

Je l'utilise surtout lors d'un fetch_array(), parce que fetch_array() renvoit toujours un tableau avec de "string" même si les champs sont en INT.

Je force aussi certaines variables à être en INT car comme ca, je suis paré à tout, surtout lors de mes appels à la base de donnée.

Imagine que je fasse ca pour une query :
SELECT xx,yy FROM tt WHERE x = $x;
Mon champ x est en INT(11).
Si $x est un entier, aucun problème.
Si $x est un string alors tu vas te taper une erreur SQL.

Voila pourquoi je force dans mes méthodes. Comme ca, je n'ai aucun problème par la suite.

Le but d'une classe est de pouvoir utiliser les méthodes sans avoir à faire un quelconque test puisque tout doit se faire dans ma classe.
Un peu comme une API, tu lui passes des trucs en paramètres et ca fait mumuse tout seul :)


Pour mes retours de fonctions, j'évite au grand maximum de faire du "mixed return". J'utilise les exceptions via PHP5 au lieu de générer un FALSE :)
Beaucoup plus facile à utiliser d'ailleurs :

try {
$retour = $objet->method($params);
echo $retour;
} catch ( Exception $e ) {
die ($e->getMessage());
}

Si $objet->method retourne une exception, je saute directement au catch.
Sachant que tu peux imbriquer les try{}catch{}, la prog devient plus facile à lire tout à coup plutot que de faire 40 instructions en une ligne :p

Voila voila

Commentaire de ryohazuki le 22/01/2007 13:11:01

salut je suis en train de creer mon site et je suis tres besoin des commentaires .le probleme c"est quand j'esai d'instaler un script je fini par l'echoue.
et maintenan je veux un membre de ce site qui l'installe a ma place.
-mon hebergeure est lycos (multimania.lycos.fr)
-mon psuedo est : taha_ryo_hazuki
-mon mot de passe est: shenmue200
MERCI !!!!!!!!!!!!!

Commentaire de acidline le 16/07/2008 15:36:59 9/10

Bonjour à tous,

Super le code, enfin quelque chose de concret sur l'architecture web avec PHP. Cependant, je pense qu'il y des gens comme moi qui souffre un petit peu par manque de connaissance (ou d'entrainement !). C'est possible d'avoir des exemples d'utilisation ...

Ok pour l'exemple d'affichage d'une news mais comment tu gères ça quand il y en a plusieurs, il faut utiliser la méthode GetMultipleNews(x,y) mais comment tu récupères le résultat, quand je teste je récupère qu'une news à la fois.

Ensuite comment fonctionne les méthode d'ajout et de modif. Il faut que le tableau que l'on transmet aux méthode soit du type NewsObject ?!

Bref, la class est magnifique et j'ai eu beaucoup de mal à la comprendre, mais c'est vraiment énorme de pouvoir progresser grâce à des personnes comme toi.

Mais s'il te plait, encore un chti effort pour des exemples !!!

Nico

Commentaire de acidline le 18/07/2008 10:33:33

pour info, CodeFalse et moi même (enfin surtout moi !) bataillons sur l'adaptation de la source de FhX pour une utilisation perso !

<a target="_blank" href="http://www.phpcs.com/infomsg_PB-AVEC-CLASS-NEWS-FHX_1172213.aspx">Rendez-vous ici</a>

Commentaire de tefa24600 le 21/02/2012 11:07:39 6/10

Bonjour FhX, merci pour avoir partager ce code, notamment en ce qui concerne la "bonne" programmation de la POO, comme l'exploitation d'une interface pour les développeurs qui utiliseront cette source.
Mais (car il y a un mais), mettre ce code en initié alors qu'il n'en est rien (la mise en place des design pattern requiert quand même un minimum d'expérience) et proposer ce code sans commentaire, sans source SQL et sans la classe de connexion est idiot..

Voilà pourquoi je mets une note si basse, qui reste au-dessus de la moyenne car ce code vaut plus je l'accorde.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème affichage de la commentaires [ par dyto ] bonjour les zéros, mon probleme c que je fai un tuto, et il y 2 champs, et kon on les remplies, il l'ajoute dans la bdd et l'affiche dans en haut, com Ajouter des commentaires a des news [ par jeromeke ] Bonjour,je suis à la recherche d'un script qui explique comment ajouter des commentaires à des news.Merci d'avance.Jérôme Compteur de nombre de commentaires posté pour une news [ par jeromeke ] Voila je comprend pas trop le principe alors si qqun pourrait m'aider je serais ravis!Merci d'avance,Jérôme Plusieurs Commentaires sur une meme page a partir de la BDD [ par djangoboy ] Bonjour a tous, J'ai une question et oui ca m'arrive : J'ai r&#233;alis&#233; un script de news et aussi un script d'agenda, pour le moment tout va prb incrémentation php et recuperer 2 tables dans 1 page [ par dtbfefe ] Bonjour ,j ai un gros soucis dans une incr&#233;mentation, enfin je pense que c'est le plus interressant pour ce dont je veux faire:explications:j ai Probleme POO [ par cedriclomb ] Bonjour,Aujourd'hui au programme casse tete chinois ! :DVoila j'ai une classe B qui est une extends de Aun objet $b=new B;et ensuite $b-&gt;loadModule Fonctionnement SDO [ par guill76 ] Bonjour,Je viens de découvrir un petit peu l'extension SDO de PHP5 que j'ai récupérée en installant PHP5.2.5 il ya environ un semaine et dans cette ex [PHP5] Etendre une classe prédéfinie [ par ZuGbEn ] Bonjour !Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des [POO] Une classe dans une classe [ par Mrreivax ] Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière Probléme avec GET_PAGE [ par matrixscript59 ] donc voicie mon probléme quand je regarde les commentaire de mais news  il veut pas me affiché la page 2 ou 3 etc... quand je clic sur 2 il me envoye


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales