Précédent   Forum des professionnels en informatique > PHP > Langage

Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster -> FAQ PHP, Cours langage et Sources PHP

Réponse
 
Outils de la discussion
Vieux 20/01/2007, 17h59   #1 (permalink)
Membre Confirmé
 
Avatar de fadex
 
Date d'inscription: septembre 2005
Localisation: Marrakech
Âge: 26
Messages: 218
Par défaut Comment bien programmer en PHP ?

Bonjour

ma question et la suivante :

Comment bien programmer en PHP ?

Donc si vous avez des conseils, des truc à utiliser/éviter et d'autres choses.

Par exemple :
Code le plus court :
Code :
for ($i=0; $i<count($array); $i++)
{
  echo $array[$i];
}
Code le plus rapide :
Code :
$count = count($array);
for ($i=0; $i<$count; $i++)
{
  echo $array[$i];
}
Merci d'avance

Dernière modification par Marc Lussac ; 15/02/2007 à 00h13.
fadex est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/01/2007, 18h14   #2 (permalink)
Rédacteur/Modérateur
 
Avatar de N1bus
 
Date d'inscription: janvier 2003
Localisation: La Rochelle
Âge: 44
Messages: 2 028
Par défaut

Bonjour,

pour ma part :

- Bien indenter le code pour une meilleure lisibilité
- Bien commenter le code , même si ça prend du temps. Tu seras content dans 6 mois d'avoir pris le temps de commenter ton code . . .
N1bus est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/01/2007, 18h50   #3 (permalink)
Rédacteur/Modérateur
 
Avatar de Sub0
 
Date d'inscription: décembre 2002
Âge: 36
Messages: 3 551
Envoyer un message via ICQ à Sub0 Envoyer un message via MSN à Sub0
Par défaut

Salut!

• Toujours bien mettre en place un algo, voir un cahier des charges bien pensé avant de se plonger dans le code. Pour cette étape, il est important de connaître les règles de sécurité, quelles peuvent être les failles : http://php.developpez.com/faq/?page=securite

• Perso, je sépare bien les "unités" de mon programme, par exemple :
cfg.php // Constante et variable de configuration
bbd.php // Fonctions d'accès à la base de données
func.php // Diverses fonctions, conversion, traitement
mail.php // Fonctions d'envoi de mail
forms.php // Formulaires html de saisie
etc...
J'inclus les unités les unes aux autres avec Require_once().

• J'utilise les tableaux pour les constantes, variables, données... et la commande global pour les intégrer dans mes fonctions. Par exemple, dans le script "cfg.php", tu trouveras :
Code :
$cfg['db_server']  = 'localhost';         // Nom du serveur
$cfg['db_name']    = 'mybase';            // Nom de la base
$cfg['db_table']   = 'membres';           // Nom de la table
$cfg['db_login']   = 'root';              // Le login d'accès de la base
$cfg['db_pass']    = '';                  // Le mot de passe de la base
$cfg['linkid']     = '';                  // Handle de la connection 
Et dans le script "bdd.php" :
Code :
Require_Once('cfg.php');
Require_Once('func.php');
 
//============================================================ 
//  CONNECTION A LA BASE DE DONNEES
//============================================================
function OpenBase($first=false){
  global $cfg;
 
  //----------------------------------------------------------
  // Déjà connecté -> Exit
  //----------------------------------------------------------
  if(!empty($cfg['linkid'])) return true;
 
  //----------------------------------------------------------
  // Test de connection su serveur
  //----------------------------------------------------------
  if(!$cfg['linkid']=@mysql_connect(
    $cfg['db_server'],
 
• Je commente bien mon code (mais pas trop) et j'utilise des séparations pour améliorer la lisibilité et structurer le code. Je n'utilise pas de tabulation, que des espaces car d'un éditeur à l'autre, la valeur des tabulations peuvent être différentes et desindenter ton code. Le résultat est assez surprenant parfois.

• J'utilise les simples quotes dans tous les cas, excepté pour encadrer les requêtes SQL où j'utilise les doubles quotes, car avec mon editeur PHP, il est possible de choisir une couleur différente. Ainsi, je repère tout de suite où se trouvent les requêtes SQL.

• J'utilise de péréférence des "echo" pour intégrer du code HTML, CSS ou Javascript dans mes scripts PHP. J'évite de fermer les balises PHP (?>) ou sinon, je mets tout le code HTML, CSS ou Javascript dans un autre fichier.

• Bien garder à l'esprit que ton code sera probablement lu par d'autres développeurs.

Dernière modification par Sub0 ; 20/01/2007 à 19h11.
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/01/2007, 10h57   #4 (permalink)
Membre Confirmé
 
Avatar de fadex
 
Date d'inscription: septembre 2005
Localisation: Marrakech
Âge: 26
Messages: 218
Par défaut

Merci

Donc est ce qu'il y a des normes à suivre, parce que parfois on arrive à des situations ambiguës (usine a gaz).

Par contre en java il existe plusieurs solutions permettant de structurer la programmation.

Donc si vous avez des exemples d’architecture ou des projets (perso) qui se base sur des architectures (MVC par exemple).
fadex est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/01/2007, 12h49   #5 (permalink)
Rédacteur/Modérateur
 
Avatar de Sub0
 
Date d'inscription: décembre 2002
Âge: 36
Messages: 3 551
Envoyer un message via ICQ à Sub0 Envoyer un message via MSN à Sub0
Par défaut

http://www.zend.com/fr/products
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/01/2007, 13h00   #6 (permalink)
Membre émérite
 
Avatar de |PaRa-BoL
 
Date d'inscription: novembre 2003
Localisation: Paris
Âge: 22
Messages: 727
Par défaut

Il vaut mieux toujours privilégier l'optimisation.

Par exemple les chaines de caractères avec des simples quotes et non pas des doubles. (Ne pas avoir la fleme de concaténer les variables). Exemple :
Code :
 
echo 'Bonjour, '. $pseudo . ' Ca va ?';
 
Biensûr bien identer et commenter.

Separer au maximum les fichiers selons leur context et non pas faire un fichier de function tout bordélique.
__________________
Si Microsoft inventait quelque chose qui plante pas, ca serai un clou
"Never Trust Foreign Data"

http://www.weelya.com/
|PaRa-BoL est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 23/01/2007, 12h36   #7 (permalink)
Membre Confirmé
 
Avatar de fadex
 
Date d'inscription: septembre 2005
Localisation: Marrakech
Âge: 26
Messages: 218
Par défaut

merci
On peut généraliser le sujet un petit peu Par exemple nous savons tous comment se connecter/déconnecter à une base de données Mysql, mais ou sein d’un projet, comment gérer cette connexion et ce qu’on doit créer des fonctions qui gère les connexions ou simplement on utilise les fonctions PHP
Code :
 
mysql_connection
mysql_query
mysql_free_result
mysql_close
 
à vous

Dernière modification par titoumimi ; 15/02/2007 à 08h28.
fadex est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/01/2007, 16h32   #8 (permalink)
Modérateur
 
Avatar de marcha
 
Date d'inscription: décembre 2003
Localisation: Lausanne (CH)
Âge: 38
Messages: 1 398
Par défaut

Citation:
Envoyé par Sub0
Pourrais-tu me dire pourquoi tu n'y crois plus ?
J'ai cru qu'il fallait toujours optimiser son code, et je n'y crois plus parce
qu'une optimisation n'est nécessaire que si il y a un besoin réel et pas
juste hypothétique.

J'ai souvent pensé qu'un code optimisé était en sois meilleur. Mais il est souvent
moins clair, plus difficile à maintenir, et il arrive qu'il soit remplacé par un nouveau
produit avant même d'avoir atteint ses limites.

Mais il est vrai, que c'est un vrai plaisir d'optimiser son code... mais on devrait le
faire que lorsqu'il s'avère que c'est économiquement nécessaire et pas avant !
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !
marcha est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/01/2007, 17h09   #9 (permalink)
Rédacteur
 
Avatar de wamania
 
Date d'inscription: juillet 2003
Localisation: Happy land
Âge: 27
Messages: 659
Par défaut

Voila un sujet que j'aime mettre mon grain de sel dedans

Pour moi, clairement lisibilité à l'échelle de l'architecture, optimisation au niveau plus atomique.
Car
  • Pour l'architecture en général, on gagnera peu à optimiser vraiment, ou alors c'est tres mal conçu dès le départ.
  • A l'échelle atomique (je parle en gros la syntaxe ligne par ligne), un petit gain pour une toute petite perte de lisibilité, c'est bien.
Enfin, après c'est au jugement personnel en fonction de la demande.

Cependant, quelques points esentiels pour moi :
Un fichier doit être soit:
- une page (donc directement/indirectement appelable depuis une url)
- une classe (et une seule par fichier)
- une config.

Les fichiers "placards", je trouve ça pas propre. En général, je n'en fait qu'un, qui regroupe les points communs à chaque pages (inclusion des classes, autoload, récup des configs, objet $db...) et éventuellement un fichier de fonctions avec vraiment l'inclassable.

L'important ensuite est de respecter la POO, genre l'encapsulation des données.
Une séparation nette de la vue est obligatoire. Ecrire directement du code HTML dans du PHP ou inversement, c'est pas propre et intenable. L'utilisation de fonctions soigne un peu cet aspect, mais au final, ça reste du HTML dans du PHP, d'autant plus que l'encapsulation des données, ça compte aussi pour une fonction et qu'un echo, c'est une sortie comme une autre. (d'ailleurs, vaut mieux éviter les global dans les fonctions et y préferer le singleton, en utilisant non pas des tableaux pour la config, mais des objets conteneurs (style Entity de java)).

Bref, pour la vue, des templates, ou mieux (mais quand même plus compliqué) le couple XML/XSLT.

Bon oki, je n'applique pas à la lettre absolument tout ce que je dit, mais j'essaie au mieux.

Pour répondre à Fadex, il existe le fameux MVC (Modèle vue contrôleur) qui consiste à séparer ces 3 couches.
La vue j'en ai parlé au dessus. Le modèle correspond en gros à tes données et donc ton accès à la base dans ton cas.
Ca signifie globalement que ton script n'a pas à savoir d'ou viennent ces données, et donc il ne faut pas utiliser de fonction spécifique à telle ou telle base, mais une classe.
Ainsi au lieu de mysql_query, tu auras $db->query.
Si ta base devient Postgresql, au lieu de pq_query, tu aura tjs $db->query, mais avec un $db différent. Il te suffit de changer le fichier contenant la déclaration de $db et hop, t'as changer de base.

Bon, j'arrete avant d'écrire un livre.
__________________
Chez Wam
Chez vous
wamania est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/01/2007, 17h28   #10 (permalink)
Membre Confirmé
 
Avatar de fadex
 
Date d'inscription: septembre 2005
Localisation: Marrakech
Âge: 26
Messages: 218
Par défaut

voila ce que je cherche

Citation:
Pour répondre à Fadex, il existe le fameux MVC (Modèle vue contrôleur) qui consiste à séparer ces 3 couches.
La vue j'en ai parlé au dessus. Le modèle correspond en gros à tes données et donc ton accès à la base dans ton cas.
il est ou le controleur ?

Mais comment appliquer l'architecture MVC dans un projet PHP ?

J’ai des petites expériences avec J2EE, mais ça reste pour moi une usine à gaz , oui c vrais qu’il y a beaucoup de doc mais ça reste de la théorie.

Donc est ce que vous avez un tuto ou un site qui explique comment mettre en place cette architecture.

Je t’encourage pour terminer le livre .

[edit]voila ce que j'ai trouvé : PHPMVC[/edit]

Dernière modification par trotters213 ; 16/02/2007 à 09h29.
fadex est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/01/2007, 17h36   #11 (permalink)
Rédacteur
 
Avatar de wamania
 
Date d'inscription: juillet 2003
Localisation: Happy land
Âge: 27
Messages: 659
Par défaut

D'une façon très simple, la vue, c'est un template (comme Smarty), ou la classe de PHPLib modifiée par PHPBB qui est très utilisée, par moi notamment), le modèle, tu utilises une classe de connexion à une BDD (genre PDO), le contrôleur, c'est toi et ta page.

Pour aller plus loin, il y a des frameworks comme le Zend Framework et pleins d'autres en fait.
Va donc faire un tour ici http://tahe.developpez.com/web/php/mvc/

PS :
Citation:
voila ce que j'ai trouvé : PHPMVC
Je trouve que c'est une grosse usine, c'est une reproduction en PHP de struts. Si tu trouve que J2EE est une usine, oublie PHPMVC
__________________
Chez Wam
Chez vous

Dernière modification par trotters213 ; 16/02/2007 à 09h30.
wamania est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/01/2007, 00h40   #12 (permalink)
Membre Expert
 
Date d'inscription: septembre 2002
Localisation: Hérault
Âge: 45
Messages: 1 438
Par défaut

Citation:
Envoyé par Sub0
Mais il faut avoir des sous.

L'utilisation de template simplifie vraiment le code.
__________________
La connaissance ne sert que si elle est partagée.
http://agora-informatique.net
http://micro-agora.net

Dernière modification par trotters213 ; 16/02/2007 à 09h31.
Mister Nono est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/01/2007, 14h31   #13 (permalink)
Membre régulier
 
Date d'inscription: juin 2006
Messages: 133
Par défaut

Et puis un petit point de détail comme ça que je connais :

Utiliser :

Code :
<?php
 
?>
Plutôt que

Code :
<?
 
?>
Il y a seulement une différence de quelques millièmes de secondes à la lecture, c'est rien du tout, mais puisqu'on est dans l'optique d'optimiser le code autant le faire, ça coute 3 lettres à rajouter.

Dernière modification par titoumimi ; 15/02/2007 à 08h18.
Andalor est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/01/2007, 15h38   #14 (permalink)
Membre émérite
 
Avatar de |PaRa-BoL
 
Date d'inscription: novembre 2003
Localisation: Paris
Âge: 22
Messages: 727
Par défaut

Citation:
Envoyé par Andalor
Et puis un petit point de détail comme ça que je connais :

Utiliser :

Code :
<?php
 
?>
Plutôt que

Code :
<?
 
?>
Il y a seulement une différence de quelques millièmes de secondes à la lecture, c'est rien du tout, mais puisqu'on est dans l'optique d'optimiser le code autant le faire, ça coute 3 lettres à rajouter.
Ce ne sert pas que à ca de spécifier le "php", dans certaine configuration le "<?" n'est pas reconnu, il est donc important de le spécifier pour plus de portabilité
__________________
Si Microsoft inventait quelque chose qui plante pas, ca serai un clou
"Never Trust Foreign Data"

http://www.weelya.com/

Dernière modification par titoumimi ; 15/02/2007 à 08h18.
|PaRa-BoL est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/01/2007, 12h01   #15 (permalink)
Modérateur
 
Avatar de mathieu
 
Date d'inscription: juin 2003
Messages: 4 699
Par défaut

Citation:
Envoyé par |PaRa-BoL
Ce ne sert pas que à ca de spécifier le "php", dans certaine configuration le "<?" n'est pas reconnu, il est donc important de le spécifier pour plus de portabilité
Depuis plusieurs versions de PHP la support de "<?" est désactivé par défaut pour ne pas intérferer avec l'utilisation des balises "<?xml"
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCOURS PHPSOURCES PHPLIVRES PHPSCRIPTS PHPOUTILS PHPCOMPARATIFSZend Framework

Réponse

Précédent   Forum des professionnels en informatique > PHP > Langage



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h51.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2009 www.developpez.com - Legal informations.