JeuWeb - Crée ton jeu par navigateur
Gérez vous les échecs d'inclusion ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Gérez vous les échecs d'inclusion ? (/showthread.php?tid=5364)

Pages : 1 2 3


Gérez vous les échecs d'inclusion ? - Ter Rowan - 07-04-2011

Coucou

Je me demandais si vous gériez les échecs d'inclusion (include, require, ...) ou si vous laissiez faire le système ?


grosso modo, j'utilise des exceptions pour le traitement de mes erreurs mais je bute sur les erreurs systèmes tel include qui ne génèrent pas d'exception que je peux catcher (enfin j'ai pas trouvé comment)

je me demande donc si je ne dois pas écrire ma propre fonction d'inclusion qui controlerait l'existance du fichier recherché (file_exists) l'incluerait si oui (include) ou lancerait une exception (throw new exception) si non


d'un côté ça m ennuie parce que ca fait 2* plus d accès au fichier mais c'est peut être plus propre pour l'utilisateur

quand pensez vous ?


RE: gérez vous les échecs d'inclusion ? - Sephi-Chan - 07-04-2011

De quoi as-tu peur ?
Quels genres de fichiers inclus-tu ?


Sephi-Chan


RE: gérez vous les échecs d'inclusion ? - Ter Rowan - 07-04-2011

(07-04-2011, 10:45 PM)Sephi-Chan a écrit : De quoi as-tu peur ?
Quels genres de fichiers inclus-tu ?


Sephi-Chan

peur du bug lors d'un passage d'un environnement à un autre, voire d'un test pas complet


exemple j utilise deux design pattern qui me font inclure en "dynamique" (ie include $fichier) des classes

à savoir
factory pour la génération d'objets
strategy pour des changements dynamiques de comportement

donc comme d'hab ca marche sur le poste en dev, et tu passes en prod et patatra la classe que t as oublié de tester qui n'est pas présente


RE: gérez vous les échecs d'inclusion ? - Sephi-Chan - 07-04-2011

Dans un tel cas, tu auras une erreur type "no such file to load". Mais est-ce un problème ? C'est pour afficher une jolie erreur à l'utilisateur et/ou t'envoyer un email d'alerte que tu aimerais récupérer de cette erreur ?


Sephi-Chan


RE: gérez vous les échecs d'inclusion ? - Ter Rowan - 07-04-2011

(07-04-2011, 10:52 PM)Sephi-Chan a écrit : Dans un tel cas, tu auras une erreur type "no such file to load". Mais est-ce un problème ? C'est pour afficher une jolie erreur à l'utilisateur et/ou t'envoyer un email d'alerte que tu aimerais récupérer de cette erreur ?


Sephi-Chan

en fait les deux mon capitaine

vis à vis de l'utilisateur communiquer correctement , voire ça peut même être transparent :

imaginons un comportement spécial (dans le pattern strategy) je n'arrive pas à le charger, ni vu ni connu je passe en comportement par défaut(ou j'en cherche un jusqu'à en trouver un)

vis à vis de moi
savoir qu'il manque un fichier est important (pour que ça ne se reproduise pas) donc me faut la trace, on ne peut pas forcément compter sur l'utilisateur pour tracer


RE: gérez vous les échecs d'inclusion ? - Sephi-Chan - 07-04-2011

Voici une discussion intéressante que j'ai trouvé sur Stack Overflow : How do I catch a PHP Fatal Error?

L'idée de définir une fonction de shutdown pour tracer un problème est bonne.
Par contre, à la différence des exceptions, ce n'est pas fait pour remettre ton application sur les rails (parce que c'est appelé très tard dans le cycle de vie du script, notamment).


Sephi-Chan


RE: gérez vous les échecs d'inclusion ? - niahoo - 07-04-2011

je fais toujours is_file() puis require, pas include, et si le fichier n'existe pas, pouf erreur 500.


RE: gérez vous les échecs d'inclusion ? - Ter Rowan - 08-04-2011

bon je me suis fait le même système que niahoo (mais avec include_once je préfère^^)

mais du coup j'ai un soucis pour mon jeu de test (certes très artisanal dans sa construction) :


$toto = new systemRoot;
echo '<h2> Module</h2>';
echo '<h3> création d un module existant</h3>';
$toto->SetModule("prems", "classeExiste");

echo '<h3> appel d un module existant</h3>';
echo "le module prems est :".$toto->GetModule("prems");

echo '<h3> tentative de création d un module inexistant</h3>';
$toto->SetModule("deuz", "classeExistePas");
echo "le module prems est :".$toto->GetModule("prems");

echo '<h3> modification d un module existant</h3>';
$toto->SetModule("prems", "classeExiste2");
echo "le module prems est :".$toto->GetModule("prems");

echo '<h3> tentative de modification d un module inexistant</h3>';
$toto->SetModule("prems", "classeExistePas");
echo "le module prems est :".$toto->GetModule("prems");

echo '<h3> tentative d appel d un module non chargé</h3>';
echo "le module deuz est :".$toto->GetModule("deuz");

echo '<h2> Donnees</h2>';
echo '<h3> ajout de donnees nouvelles (2enreg)</h3>';
$toto->SetData("Preums", array( 'id' => 4, 'P2' => 6));
$toto->SetData("Preums", array( 'id' => 5, 'P2' => 8));

echo '<h3> lecture de donnees nouvelles</h3>';
printr ( $toto->GetData("Preums") );

echo '<h3> tentative d ajout de donnees déjà présentes (premier controle dans la structure données qui refusera)</h3>';
$toto->SetData("Preums", array( 'id' => 4, 'P2' => 12));
printr ( $toto->GetData("Preums") );

echo '<h3> tentative d ajout de donnees au mauvais format(premier controle dans la structure données qui refusera)</h3>';
$toto->SetData("Preums", 777);
printr ( $toto->GetData("Preums") );

echo '<h3> tentative de création d une structure de données inexistante</h3>';
$toto->SetData("ExistePas", array( 'id' => 4, 'P2' => 6));

comme vous pouvez le voir j'ai 11 tests sur cette page, dont 7 cas qui doivent me renvoyer une exception (a dire vrai la moitié des cas est lié à notre exception du dessus, elle même catchée dans systeme mais renvoyant une nouvelle exception lié au système)

et je n'ai pas envie de faire try catch au cas par cas

j'aimerais faire un unique try { tous les cas } catch {affiche l'erreur et continue ligne d'après}

quand je cherche c'est la réponse basique ben ca continue après le catch, moi j'aimerai que ca continue après l'exception...

je sens que je vais encapsuler tous mes cas tests, mais au cas où... une idée ?


RE: gérez vous les échecs d'inclusion ? - Myrina - 08-04-2011

Ça rejoint un peu ma question

Pour pouvoir reprendre l'exécution après la levée d'une exception, c'est forcément après un bloc try...catch; donc il n'a pas d'autres solutions que d'encapsuler chacun de tes appels par un bloc.



RE: Gérez vous les échecs d'inclusion ? - Sephi-Chan - 08-04-2011

Tu devrais songer à écrire des tests plus sérieux avec PHP Unit par exemple. Là tu te prends la tête pour rien. Smile


Sephi-Chan