LES RÈGLES DE LA BONNE PROGRAMMATION EN PHP

cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010 - 25 juil. 2004 à 20:37
kegi Messages postés 164 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 août 2008 - 2 janv. 2008 à 21:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24870-les-regles-de-la-bonne-programmation-en-php

kegi Messages postés 164 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 août 2008
2 janv. 2008 à 21:15
Woaw, le 100e commentaire.
S'il y à autant de commentaires, c'est pas pour rien :P

good job (= "bon travail" : pour les "pro-francophones").

Joyeux temps des fêtes.
Kevin.
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
2 janv. 2008 à 09:20
C'est écrit plus bas que tu peux l'utiliser pour constructeur... mais pas en tant que "nom de fonction"...
C'est un peu mal dit je l'avoue... mais ça date de 2004 :)
J'aime bien WEBDEB qui cite la doc, :) car j'en ai écrit une bonne partie...
La doc française est super en retard, tout le monde qui travaillait dessus a d'autres projets pour l'instant et je crois qu'elle est rendue à 50% de synchronisée à ce jour.
cs_adoy Messages postés 11 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 2 janvier 2008
2 janv. 2008 à 07:31
"Sachez que vous ne pouvez pas les utiliser sur les fonctions définies par PHP (ex: __construct())."

Il me semble que tu peux ;-) sinon comment créer tes singletons et autres designs paterns :-p
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
18 déc. 2007 à 00:09
Je reviens sur le display_errors et la @ :

* le display_errors ne devrait pas rester à On en environnement de production mais uniquement dans un environnement de test. Si un site est bien fait, il devrait être mis en production après avoir suivi le cycle minimal : développement -> test -> (recette) -> production.

Ainsi, en théorie, il ne devrait pas y'avoir de bugs sur le serveur de production. Mais malheureusement dans la réalité, il y'aura toujours une petite erreur pour trainer à un endroit. C'est pourquoi il est recommandé de laisser à On le display_errors en développement pour débugguer plus facilement (cad sans avoir à aller chercher constamment dans les logs de PHP les dernières erreurs générées par l'interprêteur), puis de le désactiver sur le serveur de production. Par contre, en production, on continue de logguer les erreurs dans le fichier de log en vue d'une consultation ultérieure pour débugguer. On peut également mettre à On la directive "ignore_repeated_error" qui permet de ne logguer qu'une seule fois une même erreur générée dans le but de limiter les écritures dans le fichier de logs et également le poids de celui-ci.

* L'arobase est, comme tu le dis, à proscrire mais tu ne dis pas non plus pourquoi. Il y'a tout d'abord la première raison logique que tu évoques, à savoir : traiter les erreurs plutôt que de les cacher. Je suis parfaitement d'accord sur ce point là. En revanche, tu omets de préciser qu'un arobase est extrêmement coûteux en performances. Pourquoi ? Et bien en fait, l'opérateur @ réalise implicitement les opérations suivantes :

- mémorisation de la valeur du display_errors dans une variable temporaire ($tmp = ini_get('display_errors') );
- mise à jour du display errors sur Off : ini_set('display_errors',1);
- interprétation de la ligne
- mise à jour du display errors à On : ini_set('display_errors', $tmp)

Ce qui donne dans la réalité :

$tmp = ini_set('error_reporting', 0);
action();
ini_set('error_reporting', $tmp);

Au final : 2 ini_set() à la suite ====> opérations extrêmement coûteuses.

C'est pourquoi, il est recommandé en production en production :

1/ De ne pas avoir de @ mais de traiter les erreurs qui peuvent être générées
2/ Placer le display_errors sur Off pour ne pas afficher les erreurs s'il en reste que l'on n'a pas détectées.

Voilà pour ce complément d'infos.

++

Hugo.
shoghi Messages postés 18 Date d'inscription jeudi 19 septembre 2002 Statut Membre Dernière intervention 18 septembre 2007
31 déc. 2005 à 01:02
Tout simplement Bravo pour ce tuto.


Shoghi
cs_Shepard Messages postés 2 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 17 août 2005
17 août 2005 à 22:25
Excellent article ! Merci :)

Juste une chose: Pour les requêtes SQL, si un jour vous passez à PostGreSQL, vous risquez d'avoir de mauvaises surprises en utilisant les quotes ( ' ) pour entourer vos requêtes ... :p

En effet, pour PostGreSQL, les noms de champs peuvent être entourés de guillemets ( " ), donc un truc de ce style:

pg_query('SELECT nom FROM utilisateurs WHERE prenom="Yves";');

génèrera une erreur ... Car PostGreSQL croira que Yves est un nom de colonne et non une valeur.

Donc voilà, vu que j'ai mis du temps à m'habituer à faire l'inverse, et surtout à comprendre quelle était mon erreur, je le mets ici, si à tout hasard quelqu'un aurait le courage de lire autant de commentaires :D :)

Encore bravo pour l'article :)
cs_phaphane Messages postés 11 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 5 février 2008
15 juin 2005 à 08:48
Excellent tuto ca Grenard, dommage que je ne sois pas tombé dessus avant que je fasse mon script GT Online ca m'aurait éviter l'erreur du <?php par exemple.

Allez une note de 10/10.
XoscBloodshed Messages postés 34 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 20 décembre 2004
25 avril 2005 à 21:13
C'est normal, quand tu utilise des simple-quotes `'', l'interpréteur PHP affiche le contenu sans interpréter justement :). Et les chaînes comme `\n' sont considérées comme des variables.
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
26 févr. 2005 à 11:32
Salut,
j'ai lut tout les post et personne n'a de problème avec les \n ou bien personne ne les utilisent ??
Je m'explique avant je codait avec les " ".
ex: $var = "Salut !!!";

Donc si je veux faire un retour à la ligne je met
ex: $var = "Salut !!!\n";

Or avec les ' ' ça marche pas du tout !!!! :'(
ex: $var = 'Salut !!!\n';
Affiche Salut !!!\n

Alors je met :
$var = 'Salut !!!'."\n";
ou
echo 'Salut !!!',"\n";

@++
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
16 févr. 2005 à 21:54
C'est super clair et pertinent. Avec "display_errors = On", je comprend pourquoi certains codes buggent un max lorsque je les exécute avec EasyPHP, logiciel que je ne peux que conseiller, ainsi que de remplacer tous vos commentaires répétitifs d'ailleurs (<?php, ceci, cela...) par ce lien qui au final est tout à fait intéressant, bien que long à lire. J'ai rarement vu autant de 10/10, et toc, j'en rajoute un !
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 janv. 2005 à 15:42
Bah, outre que Grenard a un sale caractere quand il s'agit de programmation php, faut dire ce qui est...lol...c'est un sujet passionnel, et qui donc les dechaine forcement, les passions. Mais ce n'est pas tres grave tout ca :-)
loupdesombres Messages postés 12 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 3 novembre 2004
27 janv. 2005 à 15:24
> GRenard
Ouuiinnnnn on dit tous pareil et pourtant on se mange le nez, c'est pas bien pas bien pas bien.
On est tous pour l'art de la régularité (qui accepte l'exception, pour la peine qu'elle soit commentée dans la source...).
Alors on se décrispe, je disais juste que je suis content de cette compréhension de cette fausse concaténation qui n'est qu'un passage de paramètres multiples. Etais-je bête, c'était pourtant tellement évident.

Maitenant pour avoir mon avis de manière claire :

Je recommende le point dans un codage clair et structuré, vu que ce dernier s'est imposé comme référence en la matière et donc sera compris par le plus grand nombre dans une optique de partage et de reprise des sources par le suscité plus grand nombre.

> malalam
merci pour cette explication de cette virgule en tant que concaténateur qui me semblais un peu bizarre. Je suis content de comprendre qu'il s'agissait dans le fond qu'un simple passage de paramètres multiples. Pas d'angoisse sur les fôtes, j'essaye aussi de faire de mon mieux mais il en reste toujours un paquet. Je vais d'ailleurs sans doute une rechercher sur leur mode de prolifération une fois que l'on a cliqué sur le bouton envoyé parce que ce n'est quand même pas normal tout çà !!! ^^

>A tous
humour et zen-hatitute serais plutôt agréables plutôt que le ton monte trop vite, surtout sur cette source qui ne mérite pas le moindre nuage.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 janv. 2005 à 13:50
Faut que j'arrete de faire des fautes d'orthographe moi... :-(

Je voulais ajouter : je suis tout a fait d'accord avec ton art de la regularite, c'est le plus important, vraiment :-)
Et c'est plus joli les points (plus facile a lire)...mais bon.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 janv. 2005 à 13:41
Lol...bah, dans la doc OFFICIELLE, echo utilise des virgules pour separer les parametres qu'on lui passe, et sa fonction et d'afficher ces parametres a la suite. Je crois...Et on peut utiliser le point de la concatenation avec, aussi, mais echo n'a pas ete ecrite pour ca. Voila la doc officielle.
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

http://www.php.net/manual/en/function.echo.php

et la ligne tout simple :

echo

(PHP 3, PHP 4, PHP 5 )
echo -- Output one or more strings
Description
void echo ( string arg1 [, string ...] )

Outputs all parameters.

Je ne vois pas d'operateur de concatenation ici...echo rend un output de ce qui lui est passe en parametres, et la separation des parametres se fait par des virgules. C'est la doc officielle d'echo, et donc son utilisation officielle.

On ne parle pas d'officiel ici, pourtant, mais de la meilleure facon de coder, comme tu le dis dans le titre de ton tutoriel.
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
27 janv. 2005 à 13:31
Lorsque j'aurai la doc OFFICIELLE de cela, je le rajouterai surement dans ce tutorial... En attendant, peu importe ce qui se passe, suivez la section "L'art de la Régularité" et tout sera correct :)
Perso, j'utilise le .
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 janv. 2005 à 13:19
Je suis d'accord. La difference de performance est sans doute minime. Le mieux est d'adopter une conduite, et de s'y tenir, cela rend les codes plus clairs. C'est necessaire quand on bosse seul...c'est vital quand on bosse en equipe!
Pour ma part, neanmoins, je vais faire une difference entre la veritable concatenation, et le simple affichage de plusieurs chaines de caracteres a la suite. L'idee m'a seduit.

Et merci pour le commentaire :-) Bonne annee aussi!
loupdesombres Messages postés 12 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 3 novembre 2004
27 janv. 2005 à 13:05
Jolie précision, qui me permet enfin de comprendre pourquoi il y avait deux codage si proche pour une même opération, et surtout avec des temps d'execution si différents. Cela me semblait étrange. Il n'y en avait tout bonnement pas.

Je reconnais alors tout a fait la justesse et l'interêt de cette écriture.
Elle aura ma préférence et je la recommenderais pour le developpement de petites routines rapides pour lesquelles le temps d'execution est important, voire stratégique (projet de developpement d'ia en environnement concurrentiel ...)


Je ne l'adopterais cependant pas pour les gros projet standardisé ou une forme de codage consensuelle (et donc actuellement le point) est recommandée, afin de permettre un meilleur travail d'équipe.

Bref tout dépend ou se place le plus la recherche de performance dans le projet (developpement ou production).
Merci encore pour cette précision.

Au fait, avec un poil de retard : Bonne année à tous ^^ !!!!!!
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 janv. 2005 à 12:18
Hello,

j'ai suivi un lien d'Exon pour arriver la, je ne l'avais pas vu. Tres bien! Tres bien fait, tres bien explique, et tres utile.
Bref, une bonne initiative bien realisee.

Neanmoins, j'ai lu recemment un article sur je ne sais plus quel site traitant des chaines de caracteres en PHP. Il y etait notamment dit quelquechose de tres interesant sur les echo.

Tu parles de la concatenation par virgule ou par point, donnant une prefence au point puisque c'est le standard. Certes :
$prenom = "G";
$nom = "renard";
$jemappelle = $prenom.$nom;

Ca se justifie, c'est la seule facon de proceder.

Mais echo est une structure permettant l'affichage des parametres qui lui sont passes. L'affichage.
echo $prenom,$nom;
ne concatene pas $prenom et $ nom. Enfin, ce n'est pas une veritable concatenation, c'est juste l'affichage de 2 variables passees en parametre a echo.
Dans ce cas, je pense que la virgule se justifie.
De la meme maniere :
echo '
',$nomprenom,'
';
ce n'est pas veritablement une concatenation que l'on veut obtenir; on ne demande pas de variable contenant ces 3 parametres.

La virgule dans ce cas a, de plus, un avantage : echo renvoie juste une chaine, il n'effectue pas d'operation de concatenation, c'est donc un tantinet plus rapide.

Voili :-) C'est en substance ce qu'il y avait dans cet article, et il m'a convaincu.
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
10 janv. 2005 à 15:27
merci pour cette mis au point. Parfait pour ceux qui comme ne code que rarement en php et ne veullent pas ce prendre la tête à vérifier les nouveau truc. J'espère qu'il aura plein de MAJ ;)
cs_OriOn Messages postés 822 Date d'inscription vendredi 25 mai 2001 Statut Modérateur Dernière intervention 1 août 2014
8 janv. 2005 à 07:51
Maintenant c'est fait ;-)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
8 janv. 2005 à 05:25
Sparce que c'est pas marqué une note Admin c'est pour ca :)
cs_OriOn Messages postés 822 Date d'inscription vendredi 25 mai 2001 Statut Modérateur Dernière intervention 1 août 2014
8 janv. 2005 à 00:15
Il me semble que j'ai déjà voté sur cette source.

Je te laisse le plaisir de rechercher tout ça dans l'admin hein ;-))
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
7 janv. 2005 à 19:53
allez orion, mets leur une belle note :)
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
7 janv. 2005 à 19:50
ça merite meme d'etre dans un tuto :)
la_pin Messages postés 275 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 15 décembre 2005
7 janv. 2005 à 18:57
merci bcp, ça m'a vraiment aidé pour les bases ! Parfaitement d'accord avec OriOn !
cs_OriOn Messages postés 822 Date d'inscription vendredi 25 mai 2001 Statut Modérateur Dernière intervention 1 août 2014
27 déc. 2004 à 22:24
Voilà une source comme on aimerait en voir plus sur phpcs.. A vos claviers !
Crabmaster Messages postés 5 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 26 septembre 2004
26 sept. 2004 à 00:36
Hello,
Juste peut-être pour un complément d'information, j'aime bien cette explication concernant l'utilisation de require ou include: http://frederic.bouchery.free.fr/?2004/07/20/7-RequireOuInclude

De meme que ce lien pour la concaténation: http://frederic.bouchery.free.fr/?2004/08/10/9-EchoLapinOuTortue

Sinon, c'est une très bonne idée de metre les choses au clair, ça me force a coder le plus "logiquement" possible (si j'ose dire...)

++
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
9 sept. 2004 à 08:51
J'avais jamais lu ==> Clap clap clap!!!
Bien utile tout ca!

@++

R@f
loupdesombres Messages postés 12 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 3 novembre 2004
8 sept. 2004 à 21:50
Excusez moi pour les erreurs d'inattention dans le post précédent.
LoupDesOmbres
loupdesombres Messages postés 12 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 3 novembre 2004
8 sept. 2004 à 21:47
Bon, on va faire simple.
Prenons le cas classique d'un gestionnaire de communauté qui différents contenus possibles.
La page d'accueil affiche des news, issues de la base de données, et l'aperçu des derniers messages postés par le forum.
Selon une organisation modulaire, les news sont gérées par un script et l'aperçu du forum par un autre.
Tes deux scripts on donc bsoin d'avoir accès a la base de données.
Deux choix :
- soit tu fais comme tu le proposes, et tu appelles avec include systematiquement ta classe sur la page principale, au risque qu'elle soit inutile, le cas ou le gestionnaire affiche un contenu qui n'en a pas besoin (lorsqu'il affiche par exemple un applet java qui se connecte a un chat IRC).
-soit tu le met dans chacun script, avec include_once; gérant ainsi tout les cas de façon optimale.

Pour finir, d'expérience, il est plus facile de maintenir un site modulaire selon la premiere option, ou chaque module est maintenable de façon autonome sans avoir a se référer au système général, que le deuxième, ou l'on doit toujours maintenir à la fois le gestionnaire du site en même temps que le module.
soit tu appelles ton gestionnaire de connection dans chacun, et
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
8 sept. 2004 à 21:45
imagine que chaque module que tu as travaille sur des BDD différentes. Deux script utilise la même base de donnée tu fais comment ?

Tu te connecte à toute tes bases à chaque même si ce n'est pas nécessaires ?
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
8 sept. 2004 à 21:28
Non, les classes de connexion à la DB et pour l'affichage des pages sont appelées en tout début de script(si le script et ses fonctions en ont besoin)
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
8 sept. 2004 à 20:36
gergalp> il ya 1 autre cas très courant:
celui de scripts de classes/fonctions (pour reprendre ton expression) qui appelle la classe de connexion à la BDD... comme je le disai dans mon msg précédent
Et là, c'est franchement nécessaire d'utiliser include_once sinon tu peux avoir 1 message d'erreur disant qu'il ne peut pas redéclarer la classe de connexion"
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
8 sept. 2004 à 20:22
Oui, mais il n'y a aucun intérêt à inclure le script 1 dans le script 3 par exemple, enfin, si j'ai bien compris ce que tu voulais dire...

Pour moi il y a 2 types de scripts :
- Les scripts appelés par l'utilisateur
- Les scripts de classes/de fonctions.

Seuls les scripts appelés par l'utilisateur peuvent inclure des scripts de classes/fonctions et seulement des scripts de classes/fonctions.

Tous mes scripts principaux(appelés par les utilisateurs) se trouvent à la racine, les scripts inclus sont dans un dossier include/ et les éventuels modules dans un autre dossier.
La page principale appelle les fonctions dont elle a besoin, soit au début du fichier, soit au moment voulu, et ensuite elle appelle des modules si elle en a besoin.
Si un script de fonctions n'est appelé qu'une fois dans une structure conditionelle, il est inclus au tout début de cette structure, si il est appelé par plusieures structures conditionnelles, soit je fais en sorte qu'il puisse être appelé 1 seule fois en organisant bien le script, soit, je l'apelle au tout début.

Il n'y a q'un seul cas ou le include_once() peut être nécessaire, c'est dans une boucle suivie d'une structure conditionnelle.
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
8 sept. 2004 à 13:22
Si plusieurs scripts ont besoin de ces classes mais que le script 1 et 3 par exemple, tu peux faire un include_once pour etre sur que tu ne vas pas les inclure plusieurs fois, mais tu essaieras de ne pas l'includre dans le script 2... parce que ca ne servierait à rien.
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
8 sept. 2004 à 10:35
Ce que je voulais dire, c'est que l'on peut tout à fait ne pas appeler plusieures fois le meme fichier même si l'on fait des projets volumineux au niveau du code :

je m'explique :

On peut créer une classe parente qui définit les fonctions de base pour plusieures classes filles qui dérivent les fonctons de la classe parente et en créé de nouvelles.

Comme ca, on a deux fichiers à appeler : celui de la classe parente et celui de la classe fille et toute la suite du script peut se faire avec ces deux fichiers.

Bien sur, on peut avoir plusieures classes pour le même script par exemple une pour le DB, une pour l'affichage des pages, une pour les images...
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
7 sept. 2004 à 15:01
J'ai un script autonome qui appelle ses propre plugin quand il en a besoin. Chaque plugin appelle de lui même ses propres fichiers sources et communs aux autres de fucntions.
include_once s'avère être plus que pratique dans ce genre de cas pour éviter la redéfinission de fonctions.
Pourquoi ne pas tout appelé une fois au début du script une bonne fois pour toute ?.
Si je créer un autre plugin, j'ai pas besoin d'aller modifier les autres pages. Et côté maintenance c'est plus pratique de savoir qui à besoin de quoi et ainsi de suite. Pour terminé autant limité au maximum le nombre de scripts envoyés au serveur, autant utilisé que le necessaire. Rapidité d'exécution garantie.
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
7 sept. 2004 à 14:34
de plus, le fait de mettre include_once évite aussid des erreur... il peut arriver que plusieurs fichiers appelés dans la meme page-mère appelle eux meme un fichier commun: c'est le cas pour les pages qui nécessitent un accès à la BDD par exemple...
il se peut tout a fait (et c'est meme très souvent le cas si on fait beaucoup d'include) que plusieurs fichiers nécessitent le fichier de connexion ou le fichier possédant la classe MySQL (la je parle dans mon cas, mais je ne suis certainement pas le seul comme ca)
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
7 sept. 2004 à 13:50
Oui,
soit on travail sans ambitions,
soit on se dit que notre travail pourra reservir dans l'avenir (pour nous ou pour quelqu'un d'autre)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
7 sept. 2004 à 13:42
La manière que j'explique include_once ici n'est pas obliger d'être suivi ! Ce que je propose c'est de mettre include_once du fichier dans chaque fichier qui utilise le fichier en question... Ceci est pour ressembler au C. Mais vous pouvez utiliser include_once sur un fichier de fonctions ou de classe...
Vous allez dire "Oui mais, je sais que je l'ai inclu, je ne suis pas con !?"... bah alors, à vous de voir "Voulez-vous coder ou bien coder ?"
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
7 sept. 2004 à 12:15
gergalp:: Je ne suis pas d'accord.
Include_once() est utile quand un page inclus est utilisable seul.
Parfois pour simulé des frames en php, on inclus plusieur pages qui inclus les mêmes fichiers de fonctions.
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
7 sept. 2004 à 11:30
Je ne vois pas l'intérêt de include_once() dans le sens ou comme nous écrivons le code et donc, nous savons (en principe, c'est le cas) quels fichiers sont inclus et lesquels ne le sont pas, un include() suffit.

Pour moi, le include_once() n'est qu'une manière détournée de ne pas afficher de warning au cas ou le fichier a déjà été inclus et que des fonctions sont redéfinies.
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
21 août 2004 à 19:58
Pour ceux qui comme moi n'ont toujours pas compris ce que fait un include_once() :

Son comportement est similaire à include(), mais la différence est que si le code a déjà été inclus, il ne le sera pas une seconde fois.


En l'utilisant on n'est pas obligé de vérifier si le fichier est déjà inclus.
derfum Messages postés 45 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 5 septembre 2004
15 août 2004 à 15:43
Quelques commentaires :
* la version francophone officielle de la documentation est traduite par l'équipe nexen. Alors nexen ou fr.php.net, c'est là même chose (juste le design change, et les gouts et les couleurs...)
* preg/ereg : preg_* sont plus rapides, plus puissantes, offrent des facilités impossibles avec les ereg (preg_match_all pa exemple), mais la syntaxe des masques est (un peu, faites un effort !) plus compliquée. De plus l'extension perg est maintenant (ça remonte à loin le "avant maintenant") une extension de base, donc aucune raison de s'en priver.
* echo/print concatenation virgule/point : bien expliqué sur http://frederic.bouchery.free.fr/?2004/08/10/9-EchoLapinOuTortue En résumé, le pus rapide est ob_start/echo/apostrophe/virgule/ob_end_flush
Je ne détaille pas plus, rendez-vous sur le site.
* MYSQL_ASSOC : la fonction mysql_fetch_assoc est équivalente à mysql_fetch_array et cette option.
* Fin du script : mysql_close est #vraiment# utile si la conncetion n'est plus nécessaire. C'est-à-dire que si le debut du code utilise MySQL mais que la partie suivante du code ne l'utilise plus, un lien MySQL prendra betement des ressources. Mais si les dernières lignes de code utilisent encore une connexion MySQL, mysql_close n'est pas indispensable, voire même une perte de temps (une ligne de plus pour effectuer un mechanisme automatisé tout de suite après)
* quelques fautes de frappe :
...utiliser printf ou sptrinf. -> sprintf
...le nom des champs exactes -> exacts
...l'ordre des champs changent -> change
si votre sql fais 10 mêtres -> mètres

Sinon l'idée de ce tutoriel est très bonne (même si, comme cela a été déjà dit, la partie sur les références et les pointeurs - qui n'existent pas en PHP - est un peu floue)
jonguignolo Messages postés 92 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 19 avril 2022
13 août 2004 à 17:31
j'ai quand meme une petite chose à dire sur ton tuto,
Bravo
^^
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
13 août 2004 à 16:34
Pour ce que tu as écri GBHova, c'est des exemples parce que je parle déjà assez de ca dans le tutorial.
Si les personnes ne comprenent pas, elles n'auront qu'à regarder ton post qui est de grandeur disproportionnées comparées aux autres :P
Pour ce qui est du free_result, la je ne pense pas que c'est une question de bien programmer. Il est écrit sur php.net que de l'utiliser si on croit que ca va utiliser trop de mémoire. Alors c'est inutile de l'appeler juste avant de fermer (sql_close);
Par contre, ce qui est de fermer proprement ses connexions, tu as raisons...
Comme pour toutes les fonctions ou les choses créé dynamiquement avec les classes.

psyjc: Tu veux je dise quoi sur les choses déclarées en static ? Comment ca marche ?
Ce n'est pas vraiment une "regle de bonne programmation"

Je pourrais rajouter comment utiliser les mots clés des classes php5.
Je fais ca tout suite :)
GBHova Messages postés 1 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 13 août 2004
13 août 2004 à 15:36
Ceci est un tres bon debut...
Dans la section MYSQL, j'aurai personnellement ajouté quelques informations supplementaires :

1 - Fermer proprement ses connexions MYSQL
mysql_close($db);

2 - Libérer la mémoire qu'on a utilisé dans nos requêtes d'extraction MYSQL
$ResultatRequete = mysql_query($sql);
//le traitement
...
//libération de la mémoire
mysql_free_result($ResultatRequete);
mysql_close($db);


3 - Créer des requêtes très précises
Lors de requête SQL, il est préférable d'utiliser le nom des champs exactes plutôt que d'utiliser la clé *. (SELECT * FROM...)
Pourquoi ? Parce que dans votre script, vous n'utiliserez certainement pas TOUS les champs que vous allez obtenir. De plus, si l'ordre des champs changent il pourrait y avoir des problèmes avec votre code. (voir plus bas). MÊME si votre SQL fais 10 mètres de long parce que vous placez des champs, je pense qu'il est préférable de faire ainsi !

Exemple :
MAUVAIS :
$sql "SELECT * FROM table WHERE id 1";
$resultat = mysql_query($sql);

BON :
$sql "SELECT nom, telephone, fax, email FROM table WHERE id 1";
$resultat = mysql_query($sql);



4 - mysql_fetch_array, ajoutez le paramètre MYSQL_ASSOC !
MYSQL_ASSOC = associatif
MYSQL_NUM = numérique
MYSQL_BOTH = associatif ET numérique (par défaut, si on ne précise rien)

Exemple :
while ($ligne = mysql_fetch_array($resultat, MYSQL_ASSOC))


PS : Il est mieux d'utiliser la constantes MYSQL_ASSOC plutôt que MYSQL_NUM (ou MYSQLI_...). Pourquoi ? parce que de cette manière, vous allez obtenir $var['champ'] plutôt qu'un d'un numéro qui pourrait changer : $var[5].
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
13 août 2004 à 15:11
et les variables declaré en static ? :D


( voila comme ca je recevrai pleins de mails :D )
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
12 août 2004 à 07:21
PHP.net reste à jour avec l'envoie de bugs dans les databases...
Je post parfois des erreurs de traduction.

Lorsque vous voyez dans mes messages le smiley :P, il faut prendre ce message avec un brin d'humour :) Je ne veux pas me penser prétentieux, j'ai seulement fait une blague... j'aurais du mettre pleins de smiley pour que ca soit plus compréhensible :P

Par contre, si vous voyez un :@ (qui n'est pas suivi d'un :P), alors la, c'est que je suis vraiment faché (ca m'arrive rarement !)
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
9 août 2004 à 23:33
toujours aussi modeste GRenard... loool!
rob85->On m'a déjà conseillé ce livre mais je ne l'ai pas encore acheté...
Bahanix-> je suis d'accord avec toi, je défends mon droit à pas trop savoir parler anglais, et même à préférer lire un site en français (n'y voyez pas un franchouillard franco-français mais juste un type qui en a marre d'être parfois envahi par l'anglais!). De plus, si nexen ne fait que recopier php.net mais enf rnçaius je ne vois pas où est le problème GRenard, sauf si tu as des actions chez eux... lol
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
9 août 2004 à 17:42
Je n'ai pas lu ce livre, je ne lis plus de livre PHP depuis un bon bout :P
Donc s'il y a une ressemblance, c'est bien malgré moi, ou sinon c'est eux qui m'ont copiés !
cs_rob85 Messages postés 16 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 29 octobre 2006
9 août 2004 à 15:19
Tout d'abord, barcvo pour ce tutorial qui va en aider plus d'un !!
Je me demandai sune petite chose, il y a un livre intitulé "extreme programming"..., est-ce qu'il y a un rapport avec ce tutorial? est-ce que quelqu'un l'a lu??
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
7 août 2004 à 15:30
c'est vrai j'avais pas penser à ça. Merci ^^
cs_thibob Messages postés 2 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 6 août 2004
6 août 2004 à 19:37
Merci Bahanix lol.

GRenard, ce que Bahanix veut dire c que php.net, le vrai est en anglais, les autres ce sont des traductions... donc probablement aussi équivalentes aux autres comme nexen. d'ailleurs nexen héberge php.net...

Antidote: tu peut pas faire ce que tu veut avec un echo "blabla $mavar blabla": comme echo "blabla $mavar[1]";, alorqs que tu voulais jste mettre $mavar et pas la première valeur dans le tableau mavar qui existe pas... du coup tu dois faire echo"blablabla $mavar []"; et c vrai avec plein d'autres choses ... c'éatit un avantage de faire echo'blablabla '.$mavar.'[]'; plus avec les { et } :)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
5 août 2004 à 18:14
First of all, la moitié des sites que le monde pointe sont des sites completement copié de A à Z de php.net
Deuxièmement, tu ne dois pas y aller souvent sur php.net parce qu'il y a plus que l'anglais comme langue, il y en a plus que 20 (dont le francais).
J'ai écris ici les règles de la programmation que je crois qu'il faut suivre. Si tu ne comprends rien, ne les suis pas tout simplement, tu vas les apprendre plus tard.
Ou sinon, si tu es un peu plus intelligent, tu post un commentaire demandant d'expliquer un peu plus une règle comme certain ont déjà fait.

Prétentieux moi ? oui à la réception de ton genre de commentaire... Qui dit que des conneries à mon avis ! (et celui-ci est le mien !!)
Bahanix Messages postés 32 Date d'inscription samedi 31 juillet 2004 Statut Membre Dernière intervention 27 avril 2007
5 août 2004 à 16:51
Grenard c'est pas mal mais ta façon d'écrire fait un peu prétentieuse.
J'ai pas lus les derniers messages, mais désolé, le "Arretez de pointer des liens vers nexen... le vrai et l'unique est PHP.net" je le prend plutot mal : chacun choisi les sites qu'il veut voir, d'autand plus que php.net est anglais !! Alors stp ca ne te concerne pas les sites que les gens vont voir, si qqn veut faire un lien sur nexen ou php.net, il le fait s'il le souhaite.
Au pire si ca te derange tant que ca donne l'équivalent de la page sur php.net...

Idem pour le niveau "débutant", pour le début, ok, mais la fin je te dit que qqn qui débute en php comprendra pas grand chose, moi je prend ca comme "Je connais tellement de choses que cette minuscule fraction de mes connaissances ne méritent que le terme de débutant"...
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
4 août 2004 à 19:16
Arretez de pointer des liens vers nexen... le vrai et l'unique est PHP.net !
Un require ause une Fatal Error, et un include un Warning... à ce point, je n'ai pas expliqué mais une Fatal Error fait arreter un script alors qu'un Warning continue d'executer le script... vous pouvez faire un if avec un @ si vous voulez vous même gérer l'erreur.
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
4 août 2004 à 00:28
GRenard>>bonne explication de incude_once... par contre, il me semblait qu'il existait une autre différence entre require et include (tu dis que c'est seulement le type d'erreur Warning ou Alert): require incluera obligatoirement le fichier alors que include ne le fera que si la ligne ou il se trouve s'exécute (si un include est dans un if qui n'est pas validée alor il ne sera pas inclus mais le require si...)! C'est ce qu'il me semblait avoir vu ici: http://www.nexen.net/docs/php/annotee/function.require.php?lien=require
si cela peut apporter une pierre à l'édifice de ce tuto....
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
3 août 2004 à 18:27
Très bonne idée hein de faire un tuto de la sorte :) il devrait rester dans les sources au top du site sur la page d'accueil :P
Pour ce qui est de l'initialisation des variables, oui il faut le faire, ce n'est pas plus long si tu le fais dès le début ! J'ai demandé à mon hébergeur professionel de mettre register_globals à Off. Il l'a fait, mais j'espère juste que ca ne dérangera personne d'autre (peu-etre est-ce effectif que pour moi car c'est des dossier virtuel).
Ensuite pour ce qui est de include_once voici un exemple. (C'est plus logique en C++ mais voici quand même en PHP)

header.php : ce fichier include pleins de fichiers
include("config.php");
... ("db.php");
sessions.php
page.php
stats.php
member.php
...

Et maintenant, si on va voir dans sessions.php
Mes sessions, fonctionnent avec une base de données, je vais donc faire tout en haut du fichier
include_once("db.php");
Ici le fichier ne sera pas "réinclu" parce qu'il l'a déjà été avec le fichier header.php. C'est seulement pour "avertir" que si jamais je prend le fichier sessions.php et que je l'apporte ailleurs, je vais avoir besoin de db.php (et la je pourrais peut-etre voir dans db.php un include_once("config.php");)

Vous comprenez mieux l'histoire des include_once :) ?

J'espère pour vous ;) Mais peu de sites le font parce que c'est déjà une "perte" de temps, et leur script fonctionne que pour LEUR site... et aucun autre. Mais moi par exemple, j'ai une base de site web qui fait environ 1000 lignes, 70ko, 21 fichiers. J'en avais juste marre lorsque je copie cette base vers un autre site de tous rechercher qu'est-ce qui faut que je fasse...
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
3 août 2004 à 15:10
Thibob => d'après ce que je sais "blablabla ${mavar}" équivaut "blablabla $mavar" j'en suis pas sur mais je crois bien.

Bien qu'on (que je ?) pense à initialiser toutes mes variables. Ça doit faire partie de la logique de la programmation.
Avant de faire un gateau tu vas acheter de la farine ?
Avant d'utiliser une variable tu l'initialises.

Je viens du Delphi à l'origine et quand tes sources ne peuvent pas êtres compilées parce que tu n'as pas initialisé une variables je t'assure qu'après tu prend très vite l'habitude de toutes les initialisées.

Comme quoi GRenard mon idée de faire ce "tuto" n'était pas si mauvaise ;)
cs_oga Messages postés 5 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 28 juillet 2006
3 août 2004 à 14:58
Bonjour a tous,
je suis tout nouveau ici et j'apprecie a sa juste valeur le travail effectue par GRenard pour assembler ces quelques regles de "bonne programmation", c'est tres utile de ne pas etre oblige de chercher a droite et a gauche ;-)
Deux remarques tout de meme :

1) Une premiere dans le sens de l'intervention de thibob :
vous pouvez parfaitement integrer un tableau entre des guillemets, grace aux accolades({}), comme ceci :

echo "Valeur : {$monTableau['dim1']['dim2']['dim3']}";
(voir chapitre "Les chaines de caracteres" du manuel PHP, a partir de la version 4)

2) Une seconde sur le chapitre "include_once" du tutoriel : un peu brumeux pour moi ;-) Je n'ai pas tout saisi meme si je comprends la philiosophie de include_once !

Voila,
Encore merci !
cs_thibob Messages postés 2 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 6 août 2004
3 août 2004 à 12:23
suis suppris pour els doubles quotes...
un truc dont vouis avez pas parlé et qui est pourtant très pratique:

echo "blablabla ${mavar}";


sinon sur le tuto, pour les variables à initialiser, mon hébergeur a vite changer la config de son serveur dès qu'il a vu les notice de partout .... sérieusement, vous pensez savoir initialiser toutes vos variables vous ?? ou laors j'aimerais bien avoir une fonction parce que ça complique bien les choses....
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
3 août 2004 à 01:58
Tu te trompes... require n'équivaut pas include_once... require_once existe...
J'ai rajouté quelques petites choses dans le tutoriel encore !
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 17:33
Encore une question pour compléter ce tuto. Je pense qu'il faut préciser la différence entre les fonctions include et require. Personnelement, j'utilise require car cela équivaut à include_once. Je ne connais pas la différence de rapidité, de ce coté là je laisse GRenard, Antidote ou Anthimicro, répondre à ça.

Bye
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 17:27
En effet, j'aime bien tes sources, c'est vrai que certains peuvent trouver "chiant" que tu rabaches toujours les mêmes commentaires mais bien codé est aussi un atout pour la portabilité, etc...
Parfois tu t'acharne un peu sur des débutants qui essaient de faire de leur mieux alors vas-y doucement, il y a un début à tout. Toi ainsi que beaucoup d'autre et moi même, ont été débutant. Il faut le temps d'apprendre, soif plus diplomate dans tes commentaires, ils sont instructifs mais ils peuvent en décourager certains.
Ceci dit, je vais aller mettre un commentaire sur ta source de la Class SQL.

Bon courage à tous et bonne continuation

PS:
- c'est vrai que je code beaucoup et que je n'ai guère le temps de poster des sources, mais dès que j'ai l'occasion, j'en mettrai quelques unes.
- pour GRenard particulièrement, continue comme ça (avec plus de tacte sur les commentaiers), tes sources sont vraiement excellentes

Bye
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
2 août 2004 à 17:22
J'ai fais un ajout de quelques petites choses... Pourquoi je l'écris ici ? Parce que vous recevez tous normalement un mail (dans les configs par défaut) lorsqu'un commentaire est ajouté, mais vous ne recevez pas de mail lorsqu'on modifie un code ;)

Vous pouvez continuer à ajouter de beaux commentaires ;)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
2 août 2004 à 16:58
J'entends cela par ... mmm comment dire en francais...
De garder un style de codage pareil sur tes pages.
Si une fois tu fais <? et l'autre tu fais <?php
Si une fois tu fais fopen() et l'autre fois tu fais FOpen()
Si une fois tu fais echo et l'autre print
Si une fois tu fais $var["test"] et l'autre $var['test']

Ca ne sera pas très joli... Si tu garde une manière de coder, garde la partout.

On dirait babid que tu aimes mes sources ;) merci de me soutenir ;) Si tu adores vraiment ma source Class Langage SQL (http://www.phpcs.com/code.aspx?ID=24813) va poster un petit commentaire ;) parce que beaucoup de monde se demande à quoi ca sert !

Merci à toit babid ;)
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 16:52
Merci GRenard pour ton point de vue sur les questions, par contre excuse moi mais qu'appeles-tu "pattern" ??
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
2 août 2004 à 16:38
Désolé de ne pas répondre vite aux questions qui me sont posées, mais j'habite au Québec alors il y a un petit décalage horaire ;)

Pour ereg et str que j'avais mentionné dans une autre source, j'avais écris "Je pense" et bien je ne faisais que penser parce que c'était faux.
Pour l'affichage des variables, pour ma part j'ai toujours utilisé echo, ou sinon printf si j'ai du formatage à faire.
De plus, j'ai toujours utilisé des guillemets pour faire des echo et toujours des . pour mes concaténation... je pense qu'on s'y retrouve mieux avec des points et des virgules. (Surtout que c'est un standard). Pour ce qui est des variables, je les concatène (woua c'est un verbe ?) tout le temps. C'est plus lisible et on garde le "pattern" car lorsqu'on veut afficher un tableau à multiple dimension, on a pas le choix de concatener.

Pour ce qui est des array dans un tableau, j'ai toujours utilisé des apostrophes...
À mon avis, question rapidité, comme le mentionne php.net, la différence entre print et echo est tellement minime.
Vous pouvez faire un tour sur http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 (anglais).
Donc rendu à ce point, je pense que c'est rendu une question d'habitude et de manière de coder. La seule chose que je dis la dessus, c'est de garder toujours le même pattern. Si vous utilisez print, echo, " ou ' dépendamment de votre humeur, la je pourrais dire que c'est "mal" codé. (Même chose pour les balises par exemple en minuscule et majuscule).

Juste pour une petite précision, les balises en minuscule en HTML c'est mieux pour les prochaines compatibilitées en XHTML.
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 16:35
Merci Anthomicro pour tes réponses,

Franchement je ne connaissais pas cette concaténation avec la virgule. On en apprend tous les jours (heureusement sinon on se ferai chi...). Bon merci pour tous ces conseils, je connaissais certaines réponses mais je n'en étais pas sûr. Ce tuto s'adressant à des débutants, je ne voulez pas les enduire en erreurs donc merci à Anthomicro et Antidote pour vos réponses.

Bonne continuation tout le monde.

Bye
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 août 2004 à 16:20
C'est mieux de concaténer. Tout dépend aussi du résultat que tu attends.

Pour str qui est plus rapide que ereg il suffit de regarder le site officiel (php.net).

Exemple de concaténation à virgule (marche seulement pour les echos)

echo 'Salut',$visiteur,' !';

par contre $var='Salut',$visiteur,' !'; ne fonctionnera pas, il faut concaténer avec le point dans ce cas là :

$var='Salut'.$visiteur.' !';

D'une manière générale les simples quotes (apostrophes si tu préfères) sont plus rapides que les doubles quotes (guillemets) car tout ce qui se trouve entre les guillemets est interprété, pas ce qui se trouve entre simples quotes.

Bye
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 16:12
Merci Antidote pour ta réponse,
Moi non plus je ne connait pas de concaténation par virgule ???!!!!! C'est Anthomicro qui en parle dans son commentaire, je verrai bien quand il répondra.

Ensuite c'est vrai que mon exemple ne donne pas le même résultat, par contre si on a l'exemple suivant :
Exemple :
<?php

$ma_var = 'tout le monde';

//1er méthode sans concaténation
echo "Bonjour $ma_var";

//2ème méthode avec concaténation avec guillemet
echo "Bonjour ".$ma_var;

//3ème méthode avec concaténation avec apostrophe
echo 'Bonjour '.$ma_var;
?>
Quel est la méthode la plus rapide ??
Cette question n'est pas primordiale mais c'est dans l'esprit de bien codé.

Merci pour vos réponses.
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
2 août 2004 à 15:41
Je ne connait pas pas de concaténation par virgule en php.

Que te répondre bahid puisque que tes deux méthode n'afficheront pas le même résultat. Elles n'ont rien à voir entre elles ?
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 15:16
Salut,

Non Antidote, justement, quel est la meilleur méthode entre la concaténation et sans concaténation :
Exemple :
<?php

$ma_var = 'tout le monde';

//1er méthode sans concaténation
echo 'Bonjour $ma_var';

//2ème méthode avec concaténation
echo 'Bonjour '.$ma_var;
?>

Par contre je ne vois pas aussi comment on concaténe avec des virgules ( cf commentaire d'Anthomicro)

Merci
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
2 août 2004 à 14:45
C'était pas plutôt

//1er méthode
echo "Bonjour $ma_var";

?
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 14:22
Salut,

Tout d'abord merci pour ces précisions claires et rapides.

Je souligne tout de même un point :

Je cite GRenard dans les commentaires de :
http://www.phpcs.com/code.aspx?ID=24899#commentaires

"Je pense que ereg est plus rapide que str, et preg est plus rapide que ereg"

Or Anthomicro, tu dis :
"Faux, str est plus rapide que ereg.
preg est plus rapide que ereg (car il utilise une syntaxe différente)"

Sans aucune méchanceté, faut accorder vos violons !!!

Ensuite Anthomicro, tu écris :
"tout à fait, et au lieu d'utiliser le point (dans les echos) pour la concaténation il faut utiliser la virgule"
Peux-tu me donner un exemple car je ne connais que la concaténation avec le point, et qu'en pense GRenard sur ce point ?

Cela me rappele aussi une question que j'ai oublié de noter :
Faut-il concaténer ou non ? (Je ne parle pas des variables de tableaux car là on est obligé de concaténer)
Exemple :
<?php

$ma_var = 'tout le monde';

//1er méthode
echo 'Bonjour $ma_var';

//2ème méthode
echo 'Bonjour '.$ma_var;
?>

Est-ce que l'une des méthodes à une éxécution plus rapide que l'autre ?

Merci pour vos réponses.
Bye et bonne continuation
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
2 août 2004 à 14:03
On pourrai préciser aussi la différence entre ' et " en php. entre " c'est plus lent parce que la ligne est analyser ex :

<?php

$ma_var = 'tout le monde';

echo 'Bonjour $ma_var';
// affiche Bonjour $ma_var.

echo "Bonjour $ma_var";
// affiche Bonjour tout le monde.
?>
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 août 2004 à 12:05
Salut ;-)

* Question de rapidité d'exécution et d'utilisation :
>Est-il vrai qu'il vaut mieux écrire ses balises en >minuscules plutôt qu'en majuscules ?

en minuscules

>En php, il vaut mieux utiliser l'apostrophe plutôt que le >guillements pour les echo, et l'inverse en JavaScript ?

tout à fait, et au lieu d'utiliser le point (dans les echos) pour la concaténation il faut utiliser la virgule

>Est-il préférable d'utiliser la fonction echo ou print ?

Echo puisque print retourne 1 (ce qui est plus lent)

>La fonction ereg est plus rapide que la fonction str, mais la fonction preg est plus rapide que ereg ?

Faux, str est plus rapide que ereg.
preg est plus rapide que ereg (car il utilise une syntaxe différente)

>Quel sont les comparatifs de fonction a utiliser plus que d'autre (dans le même sens que ereg/str/preg) ?

par exemple echo au lieu de print, str_replace (pour les règles simples) au lieu de ereg_replace, file_get_contents() au lieu de fopen +fgets+fclose.

a ++
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 11:17
Désolé, j'avais oublié [10/10] pour ton tuto, en espèrant que les posteurs de codes s'en serviront ;)
cs_babid Messages postés 49 Date d'inscription dimanche 21 septembre 2003 Statut Membre Dernière intervention 17 décembre 2008
2 août 2004 à 11:14
Salut,

D'abord merci à GRenard pour son tuto, et je tiens à te remercier plus particulièrement pour ta class SQL qui m'a fait gagner un temps monstre.
(cf. http://www.phpcs.com/code.aspx?ID=24813)

Je tenais juste à rajouter des petites questions que je me poses (dont j'ai la solution pour certaine) mais pour compléter ton tuto :

* Question de rapidité d'exécution et d'utilisation :
- Est-il vrai qu'il vaut mieux écrire ses balises en minuscules plutôt qu'en majuscules ?
- En php, il vaut mieux utiliser l'apostrophe plutôt que le guillements pour les echo, et l'inverse en JavaScript ?
- Est-il préférable d'utiliser la fonction echo ou print ?
- La fonction ereg est plus rapide que la fonction str, mais la fonction preg est plus rapide que ereg ?
- Quel sont les comparatifs de fonction a utiliser plus que d'autre (dans le même sens que ereg/str/preg) ?

Voila, je pense que ces petites questions complétera ton tuto, car bien codé c'est aussi avec un script qui s'exécute correctement mais aussi rapidement.

Merci pour ta réponse GRenard et bonne continuation.

Babid
Hellway Messages postés 37 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 2 août 2004
2 août 2004 à 05:18
Pour les <?php, un simple exemple, la déclaration d'un document xml :
<?xml version="1.0" encoding="iso-8859-1"?>

Dans ce cas, on peut être confronté à une erreur et ce type de déclaration va être très fréquente avec les nouveaux standards comme xhtml par exemple.
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
2 août 2004 à 04:42
Qu'est-ce que tu dis la ?
Relis ce qu'à dit loupdesombres... C'est que c'est plus logique à la base de mettre <?php car on voit bien le mot "php" avec <? on ne le voit pas...
Tu peux avoir <?xml ce qui signifie que c'est du xml et non du php.
Si tu codes avec <?php, tu es sur que ton codes va marcher partout (et les autres règles !). Si tu codes avec <?, ton site va marcher que sur les serveurs ou short_open_tag = Off. Les serveurs ont rien à y gagner... Seulement toi, et nous !
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
1 août 2004 à 02:37
Ok, je ne savais pas qu'on pouvait mettre autre chose que du php dans <? ?> (débutant inside)
Maintenant je le saurais pour les prochaines fois ...
loupdesombres Messages postés 12 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 3 novembre 2004
1 août 2004 à 00:28
Bon, on reprend. <? ?> est un balisage générique indiquant du code a interpréter.
N'importe quel code. (les déclaration de type de fichier les reprennent aussi par exemple).
Préciser <?php ?> et short_open_tag = Off evite de faire interpréter par php toute les balise <? ?> dans le document (ce qui pourrait entrainer erreur ou perte de temps).
Ce n'est vraiment que pour te montrer un cas ou çà peu bloquer que je dis çà.
Car qui code en php l'indique! Un point c'est tout.
Quel est le plus clair et précis selon toi, entre "Je parle" et "je parle français"...
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
1 août 2004 à 00:00
J'ai vu, mais quel intérêt pour les serveurs de t'obliger à taper <?php au lieu de <? ? Ils y gagnent quoi eux, de leur côté ? Et nous, on y gagne quoi ?
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
31 juil. 2004 à 15:38
cyberboy2054>>g déjà posé la meme kestion ici.... faut lire les messages des autres avant de poster!!!!
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
31 juil. 2004 à 15:29
Pourquoi est ce que maintenant doit-on utiliser
<?php ?> au lieu de <? ?> ?
c'est dû à un probleme de sécurité ?
Sinon je n'en vois pas l'intérêt, ca rallonge le code pour rien.
f bnkcm Messages postés 57 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 6 septembre 2006
28 juil. 2004 à 22:43
Merci GRenard pour ce tuto, j'ai l'impression que tu l'a fait pour ceux qui codent comme moi, ça m'aidera beaucoup à améliorer ma façon alors merci encore.
lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008
28 juil. 2004 à 10:16
autre conseil:

Lors de la récupération de formaulaire prevoir un test de contenu.

Exemple: $maval = isset($_POST"maval"]) ? $_POST["maval"] : "";

C'est toujours plus sympa et on ne sait jamais.
On pense toujours aux bugs que peut nous sortir nos script mais tres rarement a ce qu'un internaute malveillant peut faire.
Si votre site arrive a parrer les conneries d'un internanute, cest genial et ca lui donne une bonne image.

Et lol pour le $GLOBALS, un truc sympa pour etre sur que tout serra en global:

global($GLOBALS);

la au moins c sur, tout le monde y a acces ! ;)

GRenard, 10/10 :)
loupdesombres Messages postés 12 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 3 novembre 2004
27 juil. 2004 à 14:31
Bonjour a tous.

LOL Bien joué GRenard... j'en connais qui arrêtera de répéter la même chose dans ses commentaires "initiés" pour faire un simple pointage sur ce tuto.

Just kippin' trying
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
26 juil. 2004 à 21:50
Salut ;-)

Je me permet de répondre à la place de GRenard

<? et <?php n'influe en rien à la vitesse d'exécution, seulement certains serveurs ont leur directive short_open_tags à off, et donc le premier cas ne fonctionne pas. Mettre <?php assure une portabilité maximale du code.

a ++
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
26 juil. 2004 à 18:51
Merci GRenard pour ce tuto sur les variabl & les réglage a fair.. depui le tps kon te voi mettr partou les meme remark sur les réglage (tel que rgister_global...), on aurai dui s'attendr a un tel tuto! loool
Mai g kan meme 1 kestion: kel es la différence entr <? et <?php??? g conai l'utilité de register_global & des otr varaibl ke tu cite mai g tjs cru ke <? et <?php n'etai kune kestion d'abitude, cela change-t-il kelke chose a la sécurité ou a la vitesse d'exécution du script???
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
26 juil. 2004 à 15:48
$GLOBALS et non $_GLOBAL peut-etre utilisé dans les fonctions pour accèder à des variables définies globalement (hors de la fonction).
Il est déconseillé d'utiliser cette variable (à mon avis) car vous n'avez qu'à vous même spécifiez que les variables dont vous avez vraiment besoin sans accèder à toutes avec $GLOBALS. Utilisez le mot-clé global.
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
26 juil. 2004 à 14:17
Inekman a dit : "Excellent initiative, et très bien expliqué. Si y'a d'autres règles importantes, n'hésite pas à mettre à jour. :-P"

J'suis d'accord... bravo ! très bon post, 10/10
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
26 juil. 2004 à 12:44
Hééé, dis-donc GRenard, j'ai une question.
J'ai vu sur la doc PHP que y a un autre tableau superglobal : $_GLOBAL. Et à quoi sert-il ? Parce que évidement, je ne m'en souviens plus et comme ça, ça fera profiter tout le monde ...
++ & merci !
cs_manuc Messages postés 1 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 26 juillet 2004
26 juil. 2004 à 09:52
Merci GRenard pour cet excellent rappel sur les variables
Inekman Messages postés 291 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 30 juin 2006
26 juil. 2004 à 02:23
Excellent initiative, et très bien expliqué. Si y'a d'autres règles importantes, n'hésite pas à mettre à jour. :-P

Inekman.10/10
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
25 juil. 2004 à 21:13
exact j'en profitait simplement pour rappeler l'utilisation de global la référance restant l'outil optimum
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
25 juil. 2004 à 20:49
Il est quand même mieux en principe d'utiliser les passages par références des variables si celles-ci font partie intégrante de la fonction et doivent être modifiées...
Si vous ne passez que des variables de langage par exemple, vous pouvez utiliser global.
Dans l'exemple plus haut, comme la fonction ne fait que jouer avec la variable, il est préférable de le passer en référence, bien que le mot clé global fait la même chose dans ce cas.
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
25 juil. 2004 à 20:37
Merci d'avoir fait l'effort de posté ceci avec les expliquations en prime.

Je pense pour les débutants qui aurait du mal avec le principe des poiteurs on peut utilisé l'attribut "global" qui à le même rendu sur ton exemple.

---------
<?php
function test(){
global $bou;
$bou = 5;
}

$bou = 3;

test();

echo $bou;
// affiche 5
?>
Rejoignez-nous