webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 2009
-
10 juin 2007 à 22:59
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 2015
-
11 juin 2007 à 19:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 11 juin 2007 à 19:25
Pas mal, pas mal :)
2 voir 3 ptites choses quand même :
public function nbrThrow(){
return Exception747::$NbrThrow;
}
public function nbrThrow(){
return MysqlException::$NbrThrow;
}
Y'a de la re déclaration en trop ici. Théoriquement, tu devrais pouvoir faire (dans ta classe parente ):
static public function nbrThrow() {
return self::$NbrThrow;
}
Normalement, elles doivent pouvoir jouer avec les classes filles (étant donné que le nom de la propriété statique est la même).
Cependant, je vois comme un ptit problème de conception.
$NbrThrow, tu l'utilises dans ta classe parente, et que tu re-déclares par la suite dans tes classes filles. Les classes filles n'ont pas à savoir combien de Throw() ont été lancés, en effet, seule la classe parente doit s'en occuper. Ce qui aurait été plus judicieux (mais un peu plus gourmand je l'admet), c'est couper la poire en 2 :
class Exception747 extends Exception {
static private $TotalThrow = 0;
public function __construct(...) {
self::$TotalThrow++;
}
}
class MySQLException extends Exception747 {
static protected $Throw = 0;
public function __construct(...) {
parent::__construct(....);
self::$Throw++;
}
Encore que, on aurait pu faire quelque chose comme ca aussi :
class Exception747 extends Exception {
static private $AllThrows = null;
static private $CountAllThrows = 0;
public function __construct($msg, $name) {
self::$AllThrows[$name]++;
self::$CountAllThrows++;
}
static public function getCountThrowsFor($string = 'all') {
$string = strtolower($string);
if ( $string === 'all' )
return self::$CountAllThrows;
elseif ( isset( self::$AllThrows[$string] ) )
return self::$AllThrows[$string];
else
return 0;
}
}
class MySQLException extends Exception747 {
public function __construct(...) {
parent::_construct($msg, 'mysql' );
}
Ce qui permet tout de même de faire :
try {
...
...
} catch ( MySQLException $mysql_e ) {
//
}
try {
...
...
} catch ( MySQLException $mysql_e ) {
//
} catch ( FileException $file_e ) {
//
}
echo 'Nombre d\'exceptions lancées : '.Exception747::getCountThrowsFor('all').' dont '.Exception747::getCountThrowsFor('mysql').' pour MySQL et '.Exception747::getCountThrowsFor('file').' pour les fichiers.';
Eventuellement, dans ce concept, tu peux aussi vérifier l'appel de la classe dans la méthode pour éviter de faire passer via paramètre ce que tu veux rechercher.
C'est une question de point de vue de programmation de toute facon, mon avis n'a pas besoin d'être forcément suivi car ta solution est tout aussi viable. Ma solution est plus lourde aussi... ce qui peut être handicapant.
Le reste y'a rien à dire de toute facon :)
Bravo :)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 11 juin 2007 à 00:13
Merci
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 10 juin 2007 à 22:59
Bah je crois que je vais tester tout ça moi :) Ca me semble bien cool ton appli Coucou747
11 juin 2007 à 19:25
2 voir 3 ptites choses quand même :
public function nbrThrow(){
return Exception747::$NbrThrow;
}
public function nbrThrow(){
return MysqlException::$NbrThrow;
}
Y'a de la re déclaration en trop ici. Théoriquement, tu devrais pouvoir faire (dans ta classe parente ):
static public function nbrThrow() {
return self::$NbrThrow;
}
Normalement, elles doivent pouvoir jouer avec les classes filles (étant donné que le nom de la propriété statique est la même).
Cependant, je vois comme un ptit problème de conception.
$NbrThrow, tu l'utilises dans ta classe parente, et que tu re-déclares par la suite dans tes classes filles. Les classes filles n'ont pas à savoir combien de Throw() ont été lancés, en effet, seule la classe parente doit s'en occuper. Ce qui aurait été plus judicieux (mais un peu plus gourmand je l'admet), c'est couper la poire en 2 :
class Exception747 extends Exception {
static private $TotalThrow = 0;
public function __construct(...) {
self::$TotalThrow++;
}
}
class MySQLException extends Exception747 {
static protected $Throw = 0;
public function __construct(...) {
parent::__construct(....);
self::$Throw++;
}
Encore que, on aurait pu faire quelque chose comme ca aussi :
class Exception747 extends Exception {
static private $AllThrows = null;
static private $CountAllThrows = 0;
public function __construct($msg, $name) {
self::$AllThrows[$name]++;
self::$CountAllThrows++;
}
static public function getCountThrowsFor($string = 'all') {
$string = strtolower($string);
if ( $string === 'all' )
return self::$CountAllThrows;
elseif ( isset( self::$AllThrows[$string] ) )
return self::$AllThrows[$string];
else
return 0;
}
}
class MySQLException extends Exception747 {
public function __construct(...) {
parent::_construct($msg, 'mysql' );
}
Ce qui permet tout de même de faire :
try {
...
...
} catch ( MySQLException $mysql_e ) {
//
}
try {
...
...
} catch ( MySQLException $mysql_e ) {
//
} catch ( FileException $file_e ) {
//
}
echo 'Nombre d\'exceptions lancées : '.Exception747::getCountThrowsFor('all').' dont '.Exception747::getCountThrowsFor('mysql').' pour MySQL et '.Exception747::getCountThrowsFor('file').' pour les fichiers.';
Eventuellement, dans ce concept, tu peux aussi vérifier l'appel de la classe dans la méthode pour éviter de faire passer via paramètre ce que tu veux rechercher.
C'est une question de point de vue de programmation de toute facon, mon avis n'a pas besoin d'être forcément suivi car ta solution est tout aussi viable. Ma solution est plus lourde aussi... ce qui peut être handicapant.
Le reste y'a rien à dire de toute facon :)
Bravo :)
11 juin 2007 à 00:13
10 juin 2007 à 22:59