Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2383 connectés 

 


Pour ou contre du changement sur le topic ?


 
35.7 %
 5 votes
1.  Oui, faq / bonnes pratiques + blabla@php
 
 
0.0 %
        0 vote
2.  Oui, blabla@php uniquement
 
 
7.1 %
 1 vote
3.  Ce topic mérite la poubelle. Pauvre poubelle
 
 
21.4 %
 3 votes
4.  Non, ce topic reste tel quel
 
 
35.7 %
 5 votes
5.  Obiwan n'aime pas le php
 

Total : 16 votes (2 votes blancs)
Ce sondage est clos, vous ne pouvez plus voter
 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  25  26  27  ..  66  67  68  69  70  71
Auteur Sujet :

blabla@php | faq et bonnes pratiques page 1

n°1959144
nraynaud
lol
Posté le 20-01-2010 à 16:44:38  profilanswer
 

Reprise du message précédent :
pour l'instant, fuck le MVC, j'ai 200 lignes de PHP, ça serait déjà bien qu'elles fuient pas trop avant de les complexifier.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 20-01-2010 à 16:44:38  profilanswer
 

n°1959148
skeye
Posté le 20-01-2010 à 16:46:49  profilanswer
 

nraynaud a écrit :

moi à la fin je veux renvoyer au client une chaine, comment je fais si echo c'est mal ?


Si tu veux retourner une chaine, je te suggère le mot-clé "return".[:petrus75]


---------------
Can't buy what I want because it's free -
n°1959149
nraynaud
lol
Posté le 20-01-2010 à 16:48:47  profilanswer
 

flo850 a écrit :

on remarquera que si $_POST est vide, il n'y a ni succès ,ni erreur


ouais, je viens de regarder c'est pas un scénario catastrophe.  
 
Vous en feriez quoi de l'erreur ? la logger et la bouffer parce qu'elle vient du client ?


---------------
trainoo.com, c'est fini
n°1959150
skeye
Posté le 20-01-2010 à 16:50:59  profilanswer
 

nraynaud a écrit :


ouais, je viens de regarder c'est pas un scénario catastrophe.  
 
Vous en feriez quoi de l'erreur ? la logger et la bouffer parce qu'elle vient du client ?


Si c'est pas important de ton coté autant la bouffer, oui...mais si t'as moyen de la remonter au client ça peut être intéressant pour lui non?


---------------
Can't buy what I want because it's free -
n°1959151
nraynaud
lol
Posté le 20-01-2010 à 16:51:11  profilanswer
 

skeye a écrit :


Si tu veux retourner une chaine, je te suggère le mot-clé "return".[:petrus75]


je renomme Job en JsonJob et je fais renvoyer une chaine à doIt() ?


---------------
trainoo.com, c'est fini
n°1959153
nraynaud
lol
Posté le 20-01-2010 à 16:52:37  profilanswer
 

skeye a écrit :


Si c'est pas important de ton coté autant la bouffer, oui...mais si t'as moyen de la remonter au client ça peut être intéressant pour lui non?


le client (le XHR) c'est moi qui l'écrit, donc je pense que le log côté serveur c'est pas mal, mais pas plus. C'est pas l'utilisateur qui peut la déclencher.


---------------
trainoo.com, c'est fini
n°1959154
skeye
Posté le 20-01-2010 à 16:52:48  profilanswer
 

nraynaud a écrit :


je renomme Job en JsonJob et je fais renvoyer une chaine à doIt() ?


Si tu veux systématiquement remonter une chaine, autant que ce soit le type de retour de doIt(), oui...enfin c'est comme ça que je le vois.


---------------
Can't buy what I want because it's free -
n°1959156
flo850
moi je
Posté le 20-01-2010 à 16:53:37  profilanswer
 

Si job doit absolument renvoyer du json, oui ,ça me semble une bonne idée( mais je préfère un booléen si tu ne veux pas mettre  d'exception )  
 
Celui qui appelle jsonjob se charge de faire afficher le résultat au bon endroit


---------------

n°1959157
nraynaud
lol
Posté le 20-01-2010 à 16:53:43  profilanswer
 

skeye a écrit :


Si tu veux systématiquement remonter une chaine, autant que ce soit le type de retour de doIt(), oui...enfin c'est comme ça que je le vois.


pour l'instant, oui. Ok, je vais faire ça.


---------------
trainoo.com, c'est fini
n°1959158
nraynaud
lol
Posté le 20-01-2010 à 16:54:36  profilanswer
 

mais ça me fait un peu chier, j'ai eu beaucoup de sarcasmes sur ma classe Job, mais pas trop d'autres propositions.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 20-01-2010 à 16:54:36  profilanswer
 

n°1959160
flo850
moi je
Posté le 20-01-2010 à 16:56:23  profilanswer
 

si tu parles d'ici  
j'ai pas vu le contenu de la classe job, donc  pour proposer mieux, c'est chaud


---------------

n°1959161
skeye
Posté le 20-01-2010 à 16:57:16  profilanswer
 

nraynaud a écrit :


le client (le XHR) c'est moi qui l'écrit, donc je pense que le log côté serveur c'est pas mal, mais pas plus. C'est pas l'utilisateur qui peut la déclencher.


Dans ce cas oui, un log et tu bouffes...mais t'as aussi intérêt à pas laisser moisir tes logs dans un coin.[:joce]


---------------
Can't buy what I want because it's free -
n°1959162
nraynaud
lol
Posté le 20-01-2010 à 16:57:22  profilanswer
 

Code :
  1. <?php
  2. interface Job {
  3.    /**
  4.     * @abstract
  5.     * @param PDO $db the PDO object
  6.     * @return void
  7.     */
  8.    public function doIt($db);
  9. }


 
j'pensais pas que ce soit utile en fait [:pingouino]


---------------
trainoo.com, c'est fini
n°1959163
flo850
moi je
Posté le 20-01-2010 à 16:58:38  profilanswer
 

je pensais qu'il y avait plus d'autres choses ( genre l'encapsulation en transaction, le log d'erreur, ... )  
 
Vu comme ça , j'ai du mal à en voir une quelconque utilité


---------------

n°1959164
nraynaud
lol
Posté le 20-01-2010 à 16:59:06  profilanswer
 

'tain c'est relou les langages où ils mettent pas tout côte-à-côte pour apprendre plus vite :(
 
j'ai une tonne d'onglets ouverts : PHPdoc, PHPunit, PDO etc.


---------------
trainoo.com, c'est fini
n°1959167
skeye
Posté le 20-01-2010 à 17:01:24  profilanswer
 

nraynaud a écrit :

Code :
  1. <?php
  2. interface Job {
  3.    /**
  4.     * @abstract
  5.     * @param PDO $db the PDO object
  6.     * @return void
  7.     */
  8.    public function doIt($db);
  9. }


 
j'pensais pas que ce soit utile en fait [:pingouino]


 
Pourquoi tu as pas carrément une implémentation de cette interface du style "SqlJob" qui prend la requête en paramètre? Ca t'éviterait de te faire chier à subclasser pour chaque requête...ou alors c'est volontaire? ça me parait super répétitif pour peu de valeur ajoutée, non?


---------------
Can't buy what I want because it's free -
n°1959177
nraynaud
lol
Posté le 20-01-2010 à 17:09:19  profilanswer
 

skeye a écrit :


 
Pourquoi tu as pas carrément une implémentation de cette interface du style "SqlJob" qui prend la requête en paramètre? Ca t'éviterait de te faire chier à subclasser pour chaque requête...ou alors c'est volontaire? ça me parait super répétitif pour peu de valeur ajoutée, non?


j'ai des transactions plus longues qu'une seule requête.
et puis il faut bien transformer le résultat entre le SQL et le JSON
 
là j'ai juste donné un exemple booléens, mais j'ai des trucs un poil plus complexes.
 
 
 
sinon, j'ai une question subsidiaire : http://fr.php.net/manual/en/pdostatement.execute.php
imaginons que cette fonction renvoie "false", je diagnostique comment mon erreur ? [:pingouino]


---------------
trainoo.com, c'est fini
n°1959180
skeye
Posté le 20-01-2010 à 17:12:02  profilanswer
 

Sinon, pour répondre un peu plus à la question d'origine, j'ai des classes perso qui s'utilisent à peu près comme ça, chez moi :

 
Code :
  1. $db = new DbConnector([...]);
  2.  
  3. try{
  4.   $sql = new DbQuery("select ... where truc = :truc" );
  5.   $sql->parameter(':truc', $machin);
  6.   $db->execute($sql);
  7.   $results = $sql->results();
  8. }
  9. catch(...){
  10. [...]
  11. }
 


Message édité par skeye le 20-01-2010 à 17:14:59

---------------
Can't buy what I want because it's free -
n°1959182
skeye
Posté le 20-01-2010 à 17:13:33  profilanswer
 

nraynaud a écrit :

sinon, j'ai une question subsidiaire : http://fr.php.net/manual/en/pdostatement.execute.php
imaginons que cette fonction renvoie "false", je diagnostique comment mon erreur ? [:pingouino]

 

avec errorCode et errorInfo? http://fr.php.net/manual/en/pdostatement.errorinfo.php

Message cité 1 fois
Message édité par skeye le 20-01-2010 à 17:14:06

---------------
Can't buy what I want because it's free -
n°1959199
nraynaud
lol
Posté le 20-01-2010 à 17:36:33  profilanswer
 


les années 70 viennent d'appeler, elles veulent leur API. Et leur veste à paillettes aussi, y'a une surboom samedi soir  [:filter]  
 
 
merci


---------------
trainoo.com, c'est fini
n°1959201
flo850
moi je
Posté le 20-01-2010 à 17:39:11  profilanswer
 

sinon, en plus récent , il y a les exceptions , mais ça n'a pas l'air de t'enchanter


---------------

n°1959206
nraynaud
lol
Posté le 20-01-2010 à 17:45:25  profilanswer
 

flo850 a écrit :

sinon, en plus récent , il y a les exceptions , mais ça n'a pas l'air de t'enchanter


ben moi je les ai activées hein [:pingouino]
c'est pas moi qui ai mis un boolean comme type de retour à la fonction.

Code :
  1. $dbh = new PDO($sqlite_DSN, '', '',  array(PDO::ATTR_PERSISTENT => true));


---------------
trainoo.com, c'est fini
n°1959207
nraynaud
lol
Posté le 20-01-2010 à 17:46:42  profilanswer
 


et pourquoi ?
 
j'ai des jobs qui font des trucs beaucoup plus complexes (comme retourner une liste d'url d'images [:pingouino])


---------------
trainoo.com, c'est fini
n°1959209
nraynaud
lol
Posté le 20-01-2010 à 17:48:27  profilanswer
 

et surtout vous avez l'air de cracher sur la classe job, donc comment je la vire ?


---------------
trainoo.com, c'est fini
n°1959210
skeye
Posté le 20-01-2010 à 17:48:36  profilanswer
 

...mais tes jobs c'est systématiquement définition d'une classe, et execute(new monJob()), et voilà? :??:


---------------
Can't buy what I want because it's free -
n°1959212
nraynaud
lol
Posté le 20-01-2010 à 17:51:06  profilanswer
 

oui, c'est con à chier, c'est pour ça que j'aimerai le virer


---------------
trainoo.com, c'est fini
n°1959222
nraynaud
lol
Posté le 20-01-2010 à 18:03:19  profilanswer
 

skeye a écrit :


Dans ce cas oui, un log et tu bouffes...mais t'as aussi intérêt à pas laisser moisir tes logs dans un coin.[:joce]


je la logge avec error_log ?
http://www.php.net/manual/en/function.error-log.php
vous avez mieux ?


---------------
trainoo.com, c'est fini
n°1959225
skeye
Posté le 20-01-2010 à 18:09:09  profilanswer
 

nraynaud a écrit :

oui, c'est con à chier, c'est pour ça que j'aimerai le virer

 

Ok, donc perso je séparerais complètement les requêtes/transactions du reste.
Ca me donnerait une interface Transaction avec une signature proche de mon DbQuery() dans l'exemple plus haut, genre ça:

 


Code :
  1. <?php
  2. interface Transaction{
  3.     function execute(DbConnector $db, $format='json');
  4.     function results();
  5.     function jsonResults();//...ou pas, j'aurais tendance à dissocier la transformation json de la transaction, mais bon.
  6. }
  7. ?>
 


Là dessus, tes jobs deviennent de bêtes scripts du style :

 
Code :
  1.  
  2. try{
  3.    include "db.php";
  4.    $tr = new loginTransaction($_POST['login']);
  5.    echo $tr->execute($db, 'json');
  6. }
  7. catch(MachintrucException $e){
  8.     echo "{success: false, errors: { reason: '" . $e->getMessage() . "'}}";
  9.    die();
  10. }



Message édité par skeye le 20-01-2010 à 18:09:46

---------------
Can't buy what I want because it's free -
n°1959227
nraynaud
lol
Posté le 20-01-2010 à 18:17:16  profilanswer
 

*tout* le but du Job c'est justement de pas répéter le session_start(), le try/catch et le echo [:moule_bite]
 
pour l'instant, la séparation des concerns, c'est pas le sujet, pas quand y'a aussi peu de lignes de code.
 
pour l'instant, je veux éliminer la redondance et gérer centralement les erreurs.


---------------
trainoo.com, c'est fini
n°1959228
skeye
Posté le 20-01-2010 à 18:17:29  profilanswer
 

nraynaud a écrit :


je la logge avec error_log ?
http://www.php.net/manual/en/function.error-log.php
vous avez mieux ?


Rien de bien plus joyeux, je me suis fait ma propre classe pour gérer différents niveaux de log, mais c'est tout.


---------------
Can't buy what I want because it's free -
n°1959230
nraynaud
lol
Posté le 20-01-2010 à 18:25:16  profilanswer
 

Code :
  1. // create an array
  2. $my_array = array ( 'a', 'b', 'c' );
  3.  
  4. // now append a few items
  5. $my_array[] = 'd';
  6. $my_array[] = 'e';
  7. $my_array[] = 'f';
  8.  
  9.  
  10. // print the resulting array to see if it worked
  11. print_r($my_array);
  12.  
  13. results in
  14.  
  15. (
  16.     [0] => a
  17.     [1] => b
  18.     [2] => c
  19.     [3] => d
  20.     [4] => e
  21.     [5] => f
  22. )


 
tous les cris les SOS, partent dans le vent ...


---------------
trainoo.com, c'est fini
n°1959231
nraynaud
lol
Posté le 20-01-2010 à 18:25:31  profilanswer
 

skeye > ok, merci.


---------------
trainoo.com, c'est fini
n°1959232
skeye
Posté le 20-01-2010 à 18:29:41  profilanswer
 

nraynaud a écrit :

*tout* le but du Job c'est justement de pas répéter le session_start(), le try/catch et le echo [:moule_bite]

 

pour l'instant, la séparation des concerns, c'est pas le sujet, pas quand y'a aussi peu de lignes de code.

 

pour l'instant, je veux éliminer la redondance et gérer centralement les erreurs.

 

Bah tu rajoutes une classe JobRunner :

 
Code :
  1. class JobRunner{
  2.  
  3.     function __construct(){
  4.         session_start();
  5.     }
  6.  
  7.     function run(Transaction $tr){
  8.     try{
  9.        return $tr->execute($dbh, 'json');
  10.     }
  11.     catch(MachintrucException $e){
  12.         return "{success: false, errors: { reason: '" . $e->getMessage() . "'}}";
  13.     }
  14. }
 

...et là ton script est minimaliste :

 
Code :
  1. include "db.php";
  2.  
  3. $job = new JobRunner();
  4. echo $job->run(new loginTransaction($_POST['login']);

Message cité 1 fois
Message édité par skeye le 20-01-2010 à 18:34:01

---------------
Can't buy what I want because it's free -
n°1959234
nraynaud
lol
Posté le 20-01-2010 à 18:43:55  profilanswer
 

skeye a écrit :


 
Bah tu rajoutes une classe JobRunner :
 

Code :
  1. class JobRunner{
  2.  
  3.     function __construct(){
  4.         session_start();
  5.     }
  6.  
  7.     function run(Transaction $tr){
  8.     try{
  9.        return $tr->execute($dbh, 'json');
  10.     }
  11.     catch(MachintrucException $e){
  12.         return "{success: false, errors: { reason: '" . $e->getMessage() . "'}}";
  13.     }
  14. }


 
...et là ton script est minimaliste :
 

Code :
  1. include "db.php";
  2.  
  3. $job = new JobRunner();
  4. echo $job->run(new loginTransaction($_POST['login']);



c'est quoi la différence fondamentale avec mon code ?


---------------
trainoo.com, c'est fini
n°1959239
skeye
Posté le 20-01-2010 à 19:06:09  profilanswer
 

nraynaud a écrit :


c'est quoi la différence fondamentale avec mon code ?


La disparition de ta fonction execute() bizarre, tu ne sous-classes plus juste pour instancier ta classe 1 seule fois et dans le même fichier que tu la définis, tu as des Transaction réutilisables dans d'autres contextes si besoin, et tu as en bonus une séparation des couches raisonnable?


Message édité par skeye le 20-01-2010 à 19:07:28

---------------
Can't buy what I want because it's free -
n°1959271
ratibus
Posté le 20-01-2010 à 21:00:56  profilanswer
 

nraynaud a écrit :

Code :
  1. // create an array
  2. $my_array = array ( 'a', 'b', 'c' );
  3.  
  4. // now append a few items
  5. $my_array[] = 'd';
  6. $my_array[] = 'e';
  7. $my_array[] = 'f';
  8.  
  9.  
  10. // print the resulting array to see if it worked
  11. print_r($my_array);
  12.  
  13. results in
  14.  
  15. (
  16.     [0] => a
  17.     [1] => b
  18.     [2] => c
  19.     [3] => d
  20.     [4] => e
  21.     [5] => f
  22. )


 
tous les cris les SOS, partent dans le vent ...


C'est quoi le pb ? :D


---------------
Mon blog
n°1959288
drasche
Posté le 20-01-2010 à 22:50:22  profilanswer
 

nraynaud a écrit :

Code :
  1. // create an array
  2. $my_array = array ( 'a', 'b', 'c' );
  3.  
  4. // now append a few items
  5. $my_array[] = 'd';
  6. $my_array[] = 'e';
  7. $my_array[] = 'f';
  8.  
  9.  
  10. // print the resulting array to see if it worked
  11. print_r($my_array);
  12.  
  13. results in
  14.  
  15. (
  16.     [0] => a
  17.     [1] => b
  18.     [2] => c
  19.     [3] => d
  20.     [4] => e
  21.     [5] => f
  22. )
 

tous les cris les SOS, partent dans le vent ...


dans les airs [:aloy]


Message édité par drasche le 20-01-2010 à 22:50:33

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1959303
nraynaud
lol
Posté le 21-01-2010 à 00:56:04  profilanswer
 

http://adodb.sourceforge.net/ oui ? non ?


---------------
trainoo.com, c'est fini
n°1959306
skeye
Posté le 21-01-2010 à 07:02:43  profilanswer
 


Connais pas, mais ça t'apporterait quoi? :??:


---------------
Can't buy what I want because it's free -
n°1959319
nraynaud
lol
Posté le 21-01-2010 à 09:13:11  profilanswer
 

skeye a écrit :


Connais pas, mais ça t'apporterait quoi? :??:


avoir les scripts DDL et les requêtes SQL dans un langage qui n'est pas spécifique à la base, ce qui me permettrai d'utiliser sqlite en dev et postgres en intégration et prod.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  25  26  27  ..  66  67  68  69  70  71

Aller à :
Ajouter une réponse
 

Sujets relatifs
Problème pour une mise en page sous forme de tableauAfficher sur une page web directement le resultat d'une autre page web
[PHP] Fonction include plus rapide qu'un bout de code dans la page ?Ouvrir un fichier HTML en fin de page
[Résolu] Expirer la cache au niveau de la pageexecuter une page php sans rien afficher
inserer dans ma page wikiControler le changement de page
Certificat SSL a valider pour chaque élément de pageinstallé un mdp sur une page web avec Namo
Plus de sujets relatifs à : blabla@php | faq et bonnes pratiques page 1


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)