Précédent   Forum du club des développeurs et IT Pro > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 07/05/2007, 13h36   #81
Fladnag
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 242
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 242
Points : 1 427
Points : 1 427
Nous sommes sur un forum d'aide a la base... et donc nous sommes censés aider plus ou moins des gens a mettre au point leurs scripts... Or je dirais que peut etre 30% des problemes peuvent etre résolus avec la regle n°1 ou n°2.
Tout cela est évidemment a utiliser en phase de conception, pas de production... personnellement, AUCUNE requete ne s'affiche sur mon site, meme en cas d'erreur, mais je les logs quand meme dans un fichier a part pour détecter ce qui ne va pas.
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 15h07   #82
Korko Fain
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 661
Points : 661
Justement, nous nous adressons nouvent à des néophytes qui ne font pas forcement la différence entre la phase de conception/test et la phase de fonctionnement. Il est important de préciser pour ces personnes.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 15h17   #83
Djakisback
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 914
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 914
Points : 1 840
Points : 1 840
Citation:
ne jamais écrire sur la sortie et la question des perfs ne se pose pas
Salut,
tu peux être plus clair, stp ?
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 13h41   #84
sekaijin
Expert Confirmé Sénior
 
Avatar de sekaijin
 
Homme
Urbaniste
Inscription : juillet 2004
Messages : 2 172
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 49
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 2 172
Points : 5 162
Points : 5 162
tu ne fais aucun echo en cours de route tu construit ta sortie dans un buffer et tu ne fais qu'un seul et unique print ou echo

tu n'auras donc pas à te poser la question des perfs sur les différentes façon de faire un echo.

de plus si aulieu de construire une chaine de caractère qui contient le HTML à générer tu construit un arbre (objet ou array) contenant les élément à afficher

tu peux produire à la fin un format totalement différent de celui-ci au quel tu pensais au départ sans modifier ton programme.

enfin si tu trouve que ton script à une fonction que tu peux réutiliser ailleur il devient simple d'en faire une fonction

et pour finir qi pendant l'utilisation de ton script on relève un pb il est facile de savoir si c'est un pb d'affichage et donc tu ne touche qu'à l'affichage qui ets à un seul endroit ou si c'est fonctionnel auqu'el ca tu touche la fonction sans risque de casser l'affichage

ça s'appelle la séparation des couches et c'est vieux comme l'informatique

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 22h01   #85
Shinuza
Membre éclairé
 
Inscription : novembre 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 336
Points : 320
Points : 320
Citation:
Envoyé par sekaijin
tu ne fais aucun echo en cours de route tu construit ta sortie dans un buffer et tu ne fais qu'un seul et unique print ou echo

tu n'auras donc pas à te poser la question des perfs sur les différentes façon de faire un echo.

de plus si aulieu de construire une chaine de caractère qui contient le HTML à générer tu construit un arbre (objet ou array) contenant les élément à afficher

tu peux produire à la fin un format totalement différent de celui-ci au quel tu pensais au départ sans modifier ton programme.

enfin si tu trouve que ton script à une fonction que tu peux réutiliser ailleur il devient simple d'en faire une fonction

et pour finir qi pendant l'utilisation de ton script on relève un pb il est facile de savoir si c'est un pb d'affichage et donc tu ne touche qu'à l'affichage qui ets à un seul endroit ou si c'est fonctionnel auqu'el ca tu touche la fonction sans risque de casser l'affichage

ça s'appelle la séparation des couches et c'est vieux comme l'informatique

A+JYT
J'acquiesse, et je rajouterais pour Fladnag que non seulement sa méthode de débuggage est ouverte, mais qu'en plus en étant organisé on prévoit de conduire l'erreur (via trigger ou exception) de manière propre, et ce avec une couche logique dédiée à la gesion des données.
Shinuza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 22h31   #86
Djakisback
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 914
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 914
Points : 1 840
Points : 1 840
Si t'as une fonction displayX(), est-ce qu'il y a un intérêt de créer une variable supplémentaire dans celle-ci plutôt que d'écrire directement sur la sortie ?
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 13h58   #87
spidermario
Membre émérite
 
Étudiant
Inscription : septembre 2006
Messages : 512
Détails du profil
Informations personnelles :
Âge : 19

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 512
Points : 911
Points : 911
Avec une variable, on fait ce qu'on veut. On peut par exemple décider d'enregistrer le résultat dans un fichier au lieu de l'afficher et ce en changeant juste l'instruction finale.
spidermario est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 22h10   #88
sekaijin
Expert Confirmé Sénior
 
Avatar de sekaijin
 
Homme
Urbaniste
Inscription : juillet 2004
Messages : 2 172
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 49
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 2 172
Points : 5 162
Points : 5 162
J'ai eu le cas ressemement
j'avais une page qui retournais un ensemble d'info à l'utilisateur
quelqu'un ma demandé si on pouvais avoir la même chosesous forme de service Web

au lieu de retrourner du HTML je retourne du XML (SOAP)
Je n'ai touché à aucune ligne de code seul le formatage à été impacté

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 02h54   #89
Fladnag
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 242
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 242
Points : 1 427
Points : 1 427
je me fais l'avocat du diable (je sais, c'est pas bien ;o) mais si on a un script bourré d'"echo" partout, rien n'empeche d'avoir :

Code :
1
2
3
4
5
ob_start();
... // script tout pourri avec des echo
$sortie=ob_get_contents();
ob_end_clean();
// faire ce qu'on veux avec $sortie
bon evidemment c'est a eviter quand on peux faire autrement ;o)
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 10h00   #90
NEOAKIRA
Invité régulier
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 9
Points : 9
Bonjour,

Quelle est la bonne arborescence pour un projet/site en php ?
histoire de séparer les class, les includes, les pages, les images ? (ainsi que les scripts JS, CSS et autres)


Et dans un script, lorsque qu'on a accède plusieurs fois à $_POST['mail'] par exemple, vaut il mieux l'enregistrer dans une variable ( $mail = $_POST['mail']; ) ou peut on a chaque fois faire appel à $_POST['mail'] tout au long de la page, sans augmenter le temps d'exécution, les ressources consommer, etc...

Merci
NEOAKIRA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 10h46   #91
sekaijin
Expert Confirmé Sénior
 
Avatar de sekaijin
 
Homme
Urbaniste
Inscription : juillet 2004
Messages : 2 172
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 49
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 2 172
Points : 5 162
Points : 5 162
Citation:
Envoyé par Fladnag
je me fais l'avocat du diable (je sais, c'est pas bien ;o) mais si on a un script bourré d'"echo" partout, rien n'empeche d'avoir :

Code :
1
2
3
4
5
ob_start();
... // script tout pourri avec des echo
$sortie=ob_get_contents();
ob_end_clean();
// faire ce qu'on veux avec $sortie
bon evidemment c'est a eviter quand on peux faire autrement ;o)
Oui mais pourquoi faire sale quand si on y pense dès le début on peu faire propre

attention il faut dans ce cas là penser qu'il y a peut-être déjà un truc crade avec ob_start et donc penser à Gérer plusieurs buffer il faut donc écrire des callback approprié pour gérer correctement les imbrications de ob_start

du coup les perf en prennent un grand coup car non seulement on utilise des echo plus couteux que des affectation de chaines pour les dérouter dans ob_start qui lui même utilise de collback pour faire l'affectation

c'est tout de même beaucoup plus simple de faire des affectation d'une variable

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function &makeTop($mesparams) {
   ...
   $top->title = 'mon titre';
   $top->soustitle = 'mon sous titre';
   return $top;
}
 
function &makeUser($mesparams) {
   ...
   $user->name = $mesparams['nom'];
   $user->profile = 'Administrateur';
   return $user;
}
...
 
var $outBuffer = new stdClass();
$outBuffer->entete = makeTop($mesparams);
$outBuffer->contenu = ...
$outBuffer->contenu->utilisateur  = makeUser($mesparams);
 
displayHasHTML($outBuffer);
C'est simple est efficace pourquoi se casser la tête
si tu as une modif d'affichage elle est obligatoirement dans la fonction Display
si tu as une modif de traitement elle est obligatoirement dans la fonction idoine

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 15h30   #92
Djakisback
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 914
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 914
Points : 1 840
Points : 1 840
Le MVC c'est bien pour la maintenance mais moins pour les perfs ^^ La séparation peut tout du moins être faite à un autre niveau, sans buffer :

Code :
1
2
3
4
5
6
7
8
9
10
11
class User
setParams();
getSqlDatas();
 
class GUser extends User
toHTML() {
echo '<h1>'.$this->name.'</h1>';
}
toXML() {
echo '<user><name>'.$this->name.'</name></user>';
}
Ca revient au même, en plus rapide, à mon avis.


Pour ce qui est de l'utilisation des tableaux $_POST etc. si tu copies ta valeur dans une autre variable tu ne sais plus d'où elle vient alors qu'en utilisant $_POST['mail'] c'est lisible tout de suite. Après ca dépend si tu la passes dans une méthode d'objet, ca va un peu à l'encontre du principe d'encapsulation d'utiliser des globales. Tu peux aussi utiliser des préfixes pour savoir si tes données ont été vérifiées/cleanées mais en PHP la question se posent moins étant donné que les variables externes sont dans des tableaux $_POST, $_GET, etc (donc tu sais justement que les valeurs sont pas clean tant que tu les prends dans les tableau).
Pour ce qui est de l'arbo personnellement je fais au plus simple :

css
--layout.css
--text.css
--classes
----user.css
inc
classes
-- user.class.php
js
img
etc.

avec des htaccess dans les rép accessibles uniquement par PHP
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 12h55   #93
is_null
Inscrit
 
Avatar de is_null
 
Djangonaute Linuxien
Inscription : octobre 2006
Messages : 642
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations professionnelles :
Activité : Djangonaute Linuxien

Informations forums :
Inscription : octobre 2006
Messages : 642
Points : 872
Points : 872
Ne pas dépasser 76 caractères par ligne : pensez à ceux qui ont de petits terminaux.
Documentez votre code (phpDocumentor).
__________________
Blog / Github / StackOverflow

Citation:
Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
More great quotes - RIP Uriel
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 18h25   #94
spidermario
Membre émérite
 
Étudiant
Inscription : septembre 2006
Messages : 512
Détails du profil
Informations personnelles :
Âge : 19

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 512
Points : 911
Points : 911
Citation:
Envoyé par Shinuza
Faux.
Utilisé avec avec des virgules echo se comporte comme une fonction, et reçoit ainsi plusieurs paramètres qui sont envoyés au tampon de sortie sous la forme d'une seule chaine.
Avec des points on crée autant d'objets en mémoire que de littéraux.
Penchons-nous plus précisément sur le problème.

Comment echo peut-il envoyer plusieurs arguments sur la sortie ?
Les seules solutions sont utiliser la concaténation (or, si utiliser des virgules ou des points revenaient au même, ça se saurait) ou s'appeler lui-même plusieurs fois de suite.

Conclusion : utiliser echo avec la virgule revient bien à appeler echo plusieurs fois de suite.
spidermario est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 12h35   #95
Korko Fain
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 661
Points : 661
Nimporte quoi mdr.
Soit tu fais la concaténation en php
Code :
echo('tralala' . 'trucmachin' . 'tralalatsointsoin');
ou tu demande à php de le faire en c
Code :
echo('tralala', 'trucmachin', 'tralalatsointsoin');
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 12h41   #96
spidermario
Membre émérite
 
Étudiant
Inscription : septembre 2006
Messages : 512
Détails du profil
Informations personnelles :
Âge : 19

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 512
Points : 911
Points : 911
Au final, la concaténation est de toutes façons faite en C, non ?

De plus, il y a des cas ou le point est plus rapide que la virgule, je ne pense donc pas que le niveau où se fait la concaténation soit si elle existe la seule différence.
spidermario est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 13h03   #97
is_null
Inscrit
 
Avatar de is_null
 
Djangonaute Linuxien
Inscription : octobre 2006
Messages : 642
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations professionnelles :
Activité : Djangonaute Linuxien

Informations forums :
Inscription : octobre 2006
Messages : 642
Points : 872
Points : 872
Je ne pense pas que l'usage direct de echo soit une bonne pratique. Je pense qu'il faut utiliser un systême de templates.
__________________
Blog / Github / StackOverflow

Citation:
Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
More great quotes - RIP Uriel
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 14h05   #98
Korko Fain
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 661
Points : 661
Là n'est pas la question is_null ^^
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 14h47   #99
kaymak
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Citation:
Envoyé par Korko Fain
Là n'est pas la question is_null ^^
En même temps débattre sur le point ou la virgule ce n'est pas vraiment une question de grande importance.
Surtout que c'est le genre qui ont des chances d'être modifiée par l'équipe de php afin de l'améliorer....

Ce post devrait plutot débattre de technique,choix de conception, d'écriture un peu plus universel à toutes les versions de PHP plutot qu'à quelques broutilles...

Une question qui me trotte dans la tête depuis un bout de temps et à laquelle je ne trouve pas de réponse absolue.

Pour ceux qui développe en OO, lorsque vous concevez vos classes d'accès aux données.
Celles-ci respectent t'elle précisèment la structure de votre base de données (une classe = une table), ou bien cassez vous la structure de votre base de données lors du passage en objet (une classe peut piocher dans plusieurs tables) ?

Perso j'ai opté pour la première méthode, cependant cela n'est pas toujours adapté car ce que l'on peut faire en une requete via la bdd, je le fait en N requetes en utilisant le modèle objet....
En même temps j'ai la hantise d'éparpiller mon modéle de données dans mon modèle objet car lors d'une mise à jour cela imposera de vérifier plus de codes, et certaines portions passeront surement à la trappe.
Ce qui in fine créera de nouveaux bugs...

Vous concernant quels choix avait vous fait ?

bye
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 15h31   #100
Korko Fain
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 661
Points : 661
Personnellement, une classe = un objet précis. Une table n'est pas forcément égal à un objet car un objet peut avoir plusieurs attributs qui sont répartis dans plusieurs tables dues aux multiplicités.

Et ma classe ne "pioche" pas dans les bases car elle n'y accede pas, elle demande à une classe DB les informations et elle seule connait la syntaxe de mes tables et communique avec la base.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h24.


 
 
 
 
Partenaires

Hébergement Web