• Bonjour Visiteur. Bienvenue sur les nouveaux forums de MacGeneration. La peinture est encore fraiche, quelques boulons doivent être resserrés, plus d’informations demain !

Problème affichage PHP

p4bl0

Membre d’élite
Club MacG
12 Juillet 2004
4 772
425
30
$PWD
p4bl0.net
Je n'ai rien à redire à l'argumentaire de PA5CAL, je suis même complètement d'accord avec tout ce qu'il dit en fait... Faut que j'apprenne à relativiser sur ce genre de truc :)

Je connais pratiquement rien à l'assembleur (j'ai juste lu une fois une liste des opcode sur les premiers x86 en fait :p), je sais juste en reconnaitre quand j'en vois. Mais je n'ai jamais eu de mal avec les pointeurs non plus ^^.
Je dis ça dans le but de poser une question : est ce que quelqu'un saurait expliquer ce qui fait peur ou je ne sais quoi au gens avec les pointeurs ? Une fois qu'on a dit que c'est comme des variables, sauf que les "cases" mémoires auxquelles on accède avec ces variables (les pointeurs) contiennent non pas de l'information directement mais l'adresse d'une autre "case" mémoire, je vois pas bien ce qui n'est pas clair :nailbiting:
Pourtant je vois bien autour de moi que des gens galère avec les pointeurs, mais j'arrive pas à voir pourquoi... :confused:
 

tatouille

Vétéran
1 Juin 2004
5 174
494
Stanford CA
moi je dis applique le meme principe que le html aux requetes sql et ca va etre beau

pour un simple algo de recherche dans un arbre a deux branches 3 secs / 100 lignes ... :rateau:

:D
 

tatouille

Vétéran
1 Juin 2004
5 174
494
Stanford CA
Ça j'aimerais bien le savoir. Mais est-ce que c'est vraiment les pointeurs qui font peur ? Ou est-ce que c'est l'absence garbage collector ? ;)
poubelle ou pas poubelle le monde est fait de pointeur qu es-ce que java? :D
y a pas plus con qu un pointeur

Un pointeur est une variable contenant l'adresse d'une autre variable

elle ne contient pas sa valeur c est tout
quand le postier me delivre une lettre il a pas besoin de moi il a juste besoin de mon adresse

attention je n'ai pas dit qu un postier etait con **

:D
 

PA5CAL

Vétéran
Club MacG
21 Juillet 2005
9 228
596
Île-de-France
Je dis ça dans le but de poser une question : est ce que quelqu'un saurait expliquer ce qui fait peur ou je ne sais quoi au gens avec les pointeurs ? Une fois qu'on a dit que c'est comme des variables, sauf que les "cases" mémoires auxquelles on accède avec ces variables (les pointeurs) contiennent non pas de l'information directement mais l'adresse d'une autre "case" mémoire, je vois pas bien ce qui n'est pas clair :nailbiting:
Pourtant je vois bien autour de moi que des gens galère avec les pointeurs, mais j'arrive pas à voir pourquoi... :confused:
J'ai passé beaucoup de temps avec des copains à l'école puis avec des collègues au bureau afin de leur faire comprendre de quoi il retournait et comment les utiliser (pour les seconds, c'était surtout pour arrêter de passer mes journées à déboguer leur code, voire mes nuits lorsque les projets étaient en retard).

Il semble qu'il y ait plusieurs cas de figure récurrents qui se présentent :

Il y a tout d'abord ceux qui font carrément un blocage sur la possibilité d'adresser le contenu de la mémoire avec une variable, et qui ont parfois même des difficultés à utiliser les tableaux. J'ai remarqué que bien souvent ce sont des gens qui ont commencé à apprendre la programmation avec BASIC sans avoir jamais utilisé les PEEK et les POKE. Ils doivent probablement avoir des difficultés pour intégrer le concept (formation d'esprit inadaptée ?).

Ensuite il y a ceux qui ont compris le principe, mais qui s'emmêlent régulièrement les crayons entre le pointeur, la variable pointée et l'adresse de la variable pointée. Mais ça passe généralement avec une bonne explication (moyen mnémotechnique) et un peu de pratique.

Il y a aussi ceux qui maîtrisent bien les manipulations simples, mais qui ne s'en sortent plus quand ça devient plus compliqué (par exemple quand il s'agit de trouver la syntaxe pour caster un pointeur accessible au travers d'un autre pointeur, et qui pointe vers un tableau de pointeurs pointant vers des variables contenant des adresses de fonctions retournant un pointeur de pointeur, afin de l'incrémenter... :sick: ) (manque de concentration ? cours mal assimilé ?).

Enfin, il a ceux auxquels grumff doit faire allusion, pour qui les problèmes de réservation de mémoire sont un vrai cauchemar, parce qu'il ne savent plus trop vraiment ni quoi ni quand libérer parmi les zones qu'ils pointent avec leurs pointeurs (brouillons, manque d'organisation ?).

Voire pire, il y ceux qui ne se posent carrément pas de question, qui se trompent sans vergogne ni remords, et qui laissent derrière eux un code en l'état de ruine. De ceux-là, j'en ai connu un en particulier (un sous-traitant) qui m'a "pondu" :mad: des fonctions qui retournaient un pointeur pointant vers les variables locales de ces mêmes fonctions
, le tout noyé au milieu de dizaines de milliers de lignes de code... au final ça a donné un programme qui présentait de temps en temps, et très aléatoirement, de petits écarts par rapport aux résultats attendus :confused: , mais jamais au moment où je tentais de le déboguer :mouais: :hein: ... il s'est passé des mois avant que je trouver la cause du problème !


Pour reprendre ce que je disais, je suis persuadé que si on avait commencé à apprendre à tous ces gens ce qui se passe, à un plus bas niveau derrière le code que leurs programmes en C allaient générer, et notamment comment la mémoire est organisée et comment le processeur y accède, alors ils auraient mieux compris ce qu'ils faisaient et ainsi ils auraient pu éviter un grand nombre de leurs erreurs... et ça m'aurait épargné bien du temps et de l'énergie pour corriger tous ces bugs :cool: .
;)
 

p4bl0

Membre d’élite
Club MacG
12 Juillet 2004
4 772
425
30
$PWD
p4bl0.net
moi je dis applique le meme principe que le html aux requetes sql et ca va etre beau

pour un simple algo de recherche dans un arbre a deux branches 3 secs / 100 lignes ... :rateau:

:D
'ffectivement ça s'applique pas à tout tout le temps... ^^

attention je n'ai pas dit qu un postier etait con **
:D

Enfin, il a ceux auxquels grumff doit faire allusion, pour qui les problèmes de réservation de mémoire sont un vrai cauchemar, parce qu'il ne savent plus trop vraiment ni quoi ni quand libérer parmi les zones qu'ils pointent avec leurs pointeurs (brouillons, manque d'organisation ?).
Pfff tu m'étonnes... :( À la fac même à l'examen quand on a de la mémoire à allouer, on ne nous demande jamais de releaser la mémoire :rolleyes: C'est parfois relativement beaucoup de mémoire en plus, par exemple une liste chaînée de structure qui représente un adhérent à un club de sport (ouais les prof sont originaux :rateau: ) qui peut contenir (en théorie ça c'était codé sur du papier à l'exam) plusieurs centaines de "fiches" ! :hein:

Pourtant à chaque TP je disais aux profs que c'était nawak mais ils s'en tapent en fait, ils ont dû mettre un place un ordre pour apprendre les choses où ont laisse les étudiants allouer de la mémoire pendant tout un semestre sans jamais la libérer, alors après normal que ceux qui ne le savent pas ne le fassent pas...

La seule fois ou ont nous a parlé de free() c'était le jour ou on nous a présenté malloc(), mais depuis on ne nous a pas demandé de l'utiliser...

Moi je m'en tape j'ai bonne conscience je libère tout à chaque fois ;)

Le plus rigolo c'est qu'en plus on travail tous sur le même ordi, c'est un gros serveur sous Solaris et on a tous un terminal (écran + clavier + souris) sur lequel on ouvre notre session en fait...

Voire pire, il y ceux qui ne se posent carrément pas de question, qui se trompent sans vergogne ni remords, et qui laissent derrière eux un code en l'état de ruine. De ceux-là, j'en ai connu un en particulier (un sous-traitant) qui m'a "pondu" :mad: des fonctions qui retournaient un pointeur pointant vers les variables locales de ces mêmes fonctions
, le tout noyé au milieu de dizaines de milliers de lignes de code... au final ça a donné un programme qui présentait de temps en temps, et très aléatoirement, de petits écarts par rapport aux résultats attendus :confused: , mais jamais au moment où je tentais de le déboguer :mouais: :hein: ... il s'est passé des mois avant que je trouver la cause du problème !
:eek: :afraid:
 

grumff

Membre d’élite
Club MacG
9 Novembre 2000
3 606
99
Grenoble, France
www.grumff.com
Moi je crois qu'il y a surtout un nombre inimaginable de gens qui font un blocage devant tout effort de réflexion... Je ne pense pas qu'on puisse excuser tous ceux qui pondent du code tout moisi en remettant la faute à leurs formateurs. Dans toutes les filières informatique on apprend forcément les bases de la gestion de la mémoire. D'ailleurs je n'ai jamais eu l'impression que la qualité d'un développeur soit liée à l'école ou à l'université par laquelle il est passé. Ce sont les bons élèves qui font une bonne école, et non l'inverse.
 

p4bl0

Membre d’élite
Club MacG
12 Juillet 2004
4 772
425
30
$PWD
p4bl0.net
Moi je crois qu'il y a surtout un nombre inimaginable de gens qui font un blocage devant tout effort de réflexion... Je ne pense pas qu'on puisse excuser tous ceux qui pondent du code tout moisi en remettant la faute à leurs formateurs. Dans toutes les filières informatique on apprend forcément les bases de la gestion de la mémoire. D'ailleurs je n'ai jamais eu l'impression que la qualité d'un développeur soit liée à l'école ou à l'université par laquelle il est passé. Ce sont les bons élèves qui font une bonne école, et non l'inverse.
Oui évidemment, mais quand même...

Je free-ais ma mémoire avant d'être à la fac et d'avoir des cours de C, mais ça c'est parce que c'est quelque chose qui m'interesse beaucoup et que j'ai passé du temps à apprendre par moi même en lisant des bouquins ou des sites webs.

Mais pour les autres, ceux qui n'avait jamais entendu parler de langage de programmation avant les cours à la fac, si on ne leur dit pas au bon moment les bonnes habitudes à prendre ben ils ne le feront pas, et je vois pas comment ils pourraient avoir le reflexe de se dire "et si j'allais voir si c'est pas mieux de faire comme ça plutôt que comme ci" si ils ne sont pas intéressés...

non ?
 

tatouille

Vétéran
1 Juin 2004
5 174
494
Stanford CA
Oui évidemment, mais quand même...

Je free-ais ma mémoire avant d'être à la fac et d'avoir des cours de C, mais ça c'est parce que c'est quelque chose qui m'interesse beaucoup et que j'ai passé du temps à apprendre par moi même en lisant des bouquins ou des sites webs.

Mais pour les autres, ceux qui n'avait jamais entendu parler de langage de programmation avant les cours à la fac, si on ne leur dit pas au bon moment les bonnes habitudes à prendre ben ils ne le feront pas, et je vois pas comment ils pourraient avoir le reflexe de se dire "et si j'allais voir si c'est pas mieux de faire comme ça plutôt que comme ci" si ils ne sont pas intéressés...

non ?
la question se pose? est il resonable d'apprendre aussi tard?
 

grumff

Membre d’élite
Club MacG
9 Novembre 2000
3 606
99
Grenoble, France
www.grumff.com
Mais pour les autres, ceux qui n'avait jamais entendu parler de langage de programmation avant les cours à la fac, si on ne leur dit pas au bon moment les bonnes habitudes à prendre ben ils ne le feront pas, et je vois pas comment ils pourraient avoir le reflexe de se dire "et si j'allais voir si c'est pas mieux de faire comme ça plutôt que comme ci" si ils ne sont pas intéressés...
J'ai fais mes études à cheval sur 3 universités, dans tous cours que j'ai pu avoir sur des langages utilisant des pointeurs, les enseignants ont quand même lourdement insisté sur la nécessité d'être extrêmement vigilant pour bien libérer toute la mémoire qu'on alloue (y compris en Java, le garbage collector ne fait son travail que si toutes les références sont à null...). D'autant que l'on a des enseignants différents en cours, TD et TP. Donc j'ai quand même du mal à croire qu'on puisse terminer ses études sans être un minimum conscient de tout ça. Mais il y a évidemment toujours des exceptions pour confirmer la règle.
 

p4bl0

Membre d’élite
Club MacG
12 Juillet 2004
4 772
425
30
$PWD
p4bl0.net
J'ai fais mes études à cheval sur 3 universités, dans tous cours que j'ai pu avoir sur des langages utilisant des pointeurs, les enseignants ont quand même lourdement insisté sur la nécessité d'être extrêmement vigilant pour bien libérer toute la mémoire qu'on alloue (y compris en Java, le garbage collector ne fait son travail que si toutes les références sont à null...). D'autant que l'on a des enseignants différents en cours, TD et TP. Donc j'ai quand même du mal à croire qu'on puisse terminer ses études sans être un minimum conscient de tout ça. Mais il y a évidemment toujours des exceptions pour confirmer la règle.
Attention tu parles de terminer ses études, moi je parle juste de la première année de licence :)
 

grumff

Membre d’élite
Club MacG
9 Novembre 2000
3 606
99
Grenoble, France
www.grumff.com
Attention tu parles de terminer ses études, moi je parle juste de la première année de licence :)
Si on code mal en première année de licence, c'est peut-être pas trop grave... ;) C'est beaucoup plus gênant quand on tombe sur du code un peu critique écrit en C par les pieds de quelqu'un qui devait avoir un niveau au moins bac+5... ;)
 

Bladrak

Membre émérite
24 Mars 2004
599
78
31
Vincennes
Je finis ma première année de DUT Info, et c'est pas vraiment les pointeurs qui font peur... (Je parle de C/C++ là)

C'est les Super-pointeurs, les méga-pointeurs, les giga-pointeurs !!!

Les trucs incompréhensibles qui font des programmes Star-Wars. Et mine de rien ça va vite quand on fait pas de POO. (Avec les classes, ça a tendance à disparaître un peu.)

Ceci dit, une fois le concept pigé, c'est vrai que les pointeurs et références sont des outils super-puissants pour les optimisations de programme. Et on nous rabache en fin d'année que dès qu'on a un paramètre non-int à passer dans une méthode/fonction, le mieux est de le passer en référence constante. (Et c'est pas rajouter 5 lettres et un '&' qui prend du temps, par contre ne pas le mettre, ça ça en prend à l'exécution.)

Mais le concept est complexe à comprendre au début je pense, d'où les réticences.
 

grumff

Membre d’élite
Club MacG
9 Novembre 2000
3 606
99
Grenoble, France
www.grumff.com
Muh? C'est quoi ça ? :hein:
Je suppose qu'il parle de pointeur de pointeur ou de choses de ce genre ?
Il y a des cas où ça permet d'éviter de faire un cas particulier pour le premier ou le dernier élément dans des parcours de listes ou d'autre chose. Donc ça peut simplifier le code, et améliorer sa maintenabilité. Mais utilisé abusivement j'imagine que c'est source de problème oui.
 
Dernière édition:

Bladrak

Membre émérite
24 Mars 2004
599
78
31
Vincennes
Tout à fait grumff ;)

Où encore un pointeur sur un tableau, c'est un super-pointeur. (Puisque le tableau est un ensemble de pointeurs.)

Donc c'est surtout ça qui crée des frayeurs je pense, puisqu'on le voit en cursus scolaire classique relativement vite après avoir abordé la notion de pointeur.
 

bayl0ck

Membre junior
31 Mai 2008
14
0
Bonjour à tous,

Si je peux me permettre, à ce stade, je dirais que le plus important pour lui est moins d'apprendre le HTML que le php.
Dans ce cas, et c'est ce que j'ai fait à mes débuts, je ne m'embarrasserais pas de l'html et prendrais une dtd toute faite sur le net.
J'apprendrais les balises indispensables tels que html, header,body et div et publierais une page css on ne peut plus standard et minimale de manière à me concentrer sur php.
J'ai fait même pire à vrai dire: j'ai pompé le code source d'un site dont l'interface me plaisait (pour une utilisation locale uniquement!) et j'ai injecté mon code php dedans de manière à apprendre exclusivement le php mais dans une interface agréable.

La vraie question est de savoir si on commence à utiliser le php de manière procedurale ou en orienté objet. Malheureusement, la majorité des tutos online sont en procédural et là, ce serait une réelle erreur de se lancer dans cette voie car non seulement c'est dépassé et bloquant mais, surtout, on apprend les mauvaises manières qui ont par la suite la vie dure.

Pour ma part, je n'utiliserai, pour débuter aujourd'hui, aucune version de PHP antérieure à la version 5 et m'appliquerais à apprendre la Programmation Orientée Objet sans me soucier des balises html.

Une fois fait et mon code php en place, le temps est venu de passer en mode (x)HTML strict et utilise un validateur de pages online.
Ce sont les erreurs détectées par le validateur qui me permettent de bien comprendre, par l'erreur, comment coder du (x)HTML propre et standardisé.

A force de vouloir être plus catho que le pape et vouloir être à la page à tout prix, on se concentre sur tellement de choses différentes à la fois que ça fini par décourager.
Avec le recul ça nous semble simple mais essayer de vous rappeler le jours où vous vouliez faire un site et qu'on vous disait: attention, tu dois utiliser un code "HTML" compliant, attention, tu dois utiliser une feuille de style "CSS" pour séparer le fond de la forme, attention, tu dois utiliser une base de donnée pour stocker tes variables, attention, tu dois dynamiser ton site avec du php, attention, ton php doit utiliser des classes...et tout ça pour afficher une série de variables à l'écran ou afficher un simple "Hello World"...
Le but du "Hello World" est de montrer au débutant que c'est facile de coder et d'obtenir un résultat de manière à le mettre en confiance pour la suite alors qu'ici, on lui fait peur avec toutes ces considérations vraies par la suite mais pas vraiment incontournables au début.

Il est donc bon de prévenir le futur développeur des dangers à venir mais inutile de lui faire étudier le code de la route complet pour traverser un passage piéton.

Commence donc par le php en POO (qui te permettra par la même occasion de comprendre les autres languages orientés objets) et puis revient au HTML comme cerise sur le gâteau quand il sera l'heure de publier ta page dans les règles de l'art.
Une fois fait, tu auras le loisir d'embellir tes pages en apprenant le CSS.

A chaque jour suffit sa peine.

C'est mon avis.

Salut!
 
Dernière édition:

PA5CAL

Vétéran
Club MacG
21 Juillet 2005
9 228
596
Île-de-France
(Puisque le tableau est un ensemble de pointeurs.)
Bah non, pas nécessairement :confused:. Même généralement ce n'est pas le cas. Un tableau n'est qu'un ensemble de pointeurs que s'il s'agit expressément d'un tableau de pointeurs, de chaînes de caractères, ou de toute autre structure à longueur variable.

Sans préjuger du typage des éléments pointés ni d'une éventuelle dérivation de classe :
- en C, un tableau est un pointeur, et réciproquement. Sans plus.
- en C++, c'est un pointeur, associé à une taille dans le cas d'une initialisation dynamique (avec new[]), qui permet de libérer correctement la mémoire (lors du delete[]).
 
Dernière édition:

p4bl0

Membre d’élite
Club MacG
12 Juillet 2004
4 772
425
30
$PWD
p4bl0.net
Je suppose qu'il parle de pointeur de pointeur ou de choses de ce genre ?
Il y a des cas où ça permet d'éviter de faire un cas particulier pour le premier ou le dernier élément dans des parcours de listes ou d'autre chose. Donc ça peut simplifier le code, et améliorer sa maintenabilité. Mais utilisé abusivement j'imagine que c'est source de problème oui.
C'était juste un problème de vocabulaire alors :)
 

Bladrak

Membre émérite
24 Mars 2004
599
78
31
Vincennes
Bah non, pas nécessairement :confused:. Même généralement ce n'est pas le cas. Un tableau n'est qu'un ensemble de pointeurs que s'il s'agit expressément d'un tableau de pointeurs, de chaînes de caractères, ou de toute autre structure à longueur variable.

Sans préjuger du typage des éléments pointés ni d'une éventuelle dérivation de classe :
- en C, un tableau est un pointeur, et réciproquement. Sans plus.
- en C++, c'est un pointeur, associé à une taille dans le cas d'une initialisation dynamique (avec new[]), qui permet de libérer correctement la mémoire (lors du delete[]).
C'est fort probable oui, j'avoue qu'on n'a pas étudié les structures mémoire des tableaux en C++. J'en avais donc déduit que c'était pareil qu'en C, mais visiblement pas ^^ Merci pour l'éclaircissement !