La programmation en PHP

a marqué ce sujet comme résolu.

Salut,

  1. Ecrire un TP livre d’or (je ne suis pas encore fixé, ça peut être autre chose… 👀)

Nek

Je te suggère de trouver autre chose qu’un livre d’or. Je sais que c’est quelque chose de simple et restreint et donc un bon exercice, mais ça ne parle plus trop aux gens. L’époque où beaucoup de sites web avaient un livre d’or est passée depuis quelques temps. C’est aussi quelque chose qu’on retrouve de moins en moins dans les musées et autres lieux publics, donc je crains qu’une partie (jeune) de ta cible ne sache même pas ce que c’est.

La bonne nouvelle, c’est que tu peux faire comme un livre d’or, mais l’appeler autrement. Il y a plein de sites de partage de choses brèves qui existent. Par exemple, le squelette d’un agrégateur de liens ressemble à un livre d’or. Si tu dépouilles le JdH, tu te retrouves avec un titre, une URL, une personne qui l’a posté, une date.

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Changement de programme, finalement j’écris un peu plus car il manquait des choses pour faire ce fameux TP de liste d’URL (j’aimerais aussi introduire le concept d’administration etc).

Il me reste donc encore 3 chapitres à écrire, mais j’ai bien avancé, notamment avec l’ajout de la partie sur les formulaires. En fait tout cela va même conclure la partie 2. Mais c’était un peu bête d’envoyer en validation un cours sur PHP qui ne parle même pas du côté web. Donc je suis plutôt satisfait de là où je vais… Mais cela retarde un peu les choses.

+0 -0

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Au programme de cette mise à jour :

  • Les premières corrections: notamment l’installation sous windows et certains bouts de code, mais aussi des ajouts à droite à gauche
  • Nouveaux chapitres
  • Il ne reste plus que 2 chapitres à écrire !
+0 -0

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Ça avance, ça avance ! Les 2 premières parties seront bientôt finalisées. J’enverrai alors tout cela en validation ! Je vise fin février (le temps de recevoir/corriger les dernières erreurs d’orthographe flagrantes et formulations hasardeuses !).

+0 -0

Hello hello !

I’m thrilled to announce …

LES DEUX PREMIÈRES PARTIES DE MON COURS SONT TERMINÉES !

J’attends encore quelques retours, et moi même je ferai quelques correction (notamment sur les images du dernier TP). Mais dans l’ensemble c’est terminé.

Tellement de travail acharné. Beaucoup de réécriture. Je suis super heureux d’avoir été au bout de ces deux premières parties qui couvrent très bien les bases de PHP selon moi.

Special thanks à @Aabu qui est à l’origine de l’idée du dernier TP. Et naturellement à tous les inconnus de ce forum qui ont jeté un œil à mon cours pour le relire ou me conseiller.

+2 -0

Salut,

Je n’avais pas trop pris le temps de relire ton tuto jusque là alors je viens de le faire, pour ce qui est de la première partie en tout cas.
J’ai vu quelques fautes de frappe ou d’orthographe mais ne les ai pas relevées, de même que j’ai vu quelques erreurs dans certains exemples, j’imagine qu’une passe est prévue dessus.

Le cours m’a l’air prometteur et encore une fois je trouve intéressant de commencer par utiliser PHP dans son environnement le plus simple possible. :)

Je vais donc prendre les chapitres dans l’ordre pour te donner les remarques que je me suis faites lors de la lecture.

C’est quoi PHP ? Qu’est-ce qu’un langage de programmation ?

Tu dis qu’à l’époque où PHP est né, « les pages » n’étaient faites que de HTML. Je pense qu’il serait bon de recontextualiser et de dire que l’on parle bien de pages web (ce n’est pas évident si on ne connaît pas déjà le terme HTML).

Installation de l’environnement de travail

Par rapport à l’installation sous Linux, tu fais une note pour dire que les gestionnaire de paquets peut varier selon la distribution. Cette note gagnerait à être donnée plus tôt car l’installation qui précède n’est en effet valable que pour Debian / Ubuntu.

Dans ta configuration, la ligne Loaded Configuration File: /etc/php/7.4/cli/php.ini n’est pas à jour avec l’extrait de code qui précède.

Tu parles de « timezone » sans plus de précisions, le terme n’est pas clair pour tout le monde. Peut-être devrais-tu parler plutôt de fuseau horaire, et d’expliquer en quoi il est important de le configurer ?

Lors de la création du premier programme PHP tu demandes à créer un fichier vide dans le dossier, je n’ai pas compris à quoi servait ce fichier puisque ce n’est semble-t-il pas celui qui contiendra le code.

Les variables et opérations

La phrase d’introduction, « Une variable c’est simplement quelque chose qui contient autre chose », est très floue, tu devrais utiliser des termes plus précis que « chose » (« identifiant », « nom », « valeur » ?).

Tu précises que « les autres langages ne supportent pas les accents », tu devrais plutôt dire que tous les autres ne les supportent pas, PHP n’est pas le seul dans le domaine.

Par rapport à ta phrase sur le typage (« nous ne définissons pas explicitement le type des variables (on dit qu’il est faiblement typé) »), les deux propositions ne sont pas tellement équivalentes.
Si on prend l’exemple de Rust, c’est un langage fortement typé qui ne demande pas à définir explicitement le type des variables car il procède par inférence. À l’inverse, C est faiblement typé mais demande à ce que les types des variables soient explicites.
C’est plutôt le fait que PHP ait un typage dynamique (il type les valeurs plutôt que les variables) qui implique ici qu’il n’y ait pas besoin de préciser les types.

Je n’ai pas compris la phrase « On a donc tout simplement une variable ordonnée avec deux éléments: clé et valeur. » et je la trouve bizarre : pourquoi le tableau aurait deux éléments si l’on n’a mis qu’une valeur dedans ? Et qu’est-ce qui est ordonné ?
Aussi je me demande s’il n’est pas encore un peu tôt dans le cours pour présenter les tableaux. Globalement je trouve que tu vas un peu vite sur certains points.

Pour ce qui est de « les clés ne sont pas limitées aux clés », j’imagine que tu voulais dire qu’elles ne se limitent pas aux nombres entiers.

Après un exemple, tu dis aussi qu’il n’est pas très explicite d’utiliser des nombres comme clés dans le code qui précède, je me questionne alors sur la pertinence de cet exemple. À plusieurs reprises j’ai l’impression que tu as essayé de tordre certains cas d’utilisation pour qu’ils collent avec ce que tu voulais montrer, mais que ça fait des structures de données pas du tout naturelles.

Les structures de contrôles

Sur les opérateurs < et <=, tu présentes toujours les résultats d’opérations entre nombres différents. Je pense que tu devrais ajouter un exemple avec deux nombres égaux pour bien montrer la différence entre les deux opérateurs.

Les tables logiques de tes opérations booléennes n’ont que 3 lignes, il y manque la ligne true | false.
La présentation de ces opérateurs est assez brève, et les exemples éloignés de la réalité.

Je ne comprends pas ce que présente la partie « Les booléens et les autres types » : le titre me fait penser que ça va parler d’utiliser && sur des nombres par exemple, alors qu’il s’agit de montrer == false.

À part si ton clavier est inversé, je pense que la touche tabulation est tout à gauche de ton clavier plutôt qu’à droite. ^^

Tu indiques vouloir lister les nombres de 1 à 9999, mais en réalité tes exemples commencent à 0.

Qu’est-ce que tu veux dire en parlant de « boucle un peu custom » ? Je ne comprends pas le terme utilisé dans ce contexte.

Est-ce que tu ne ferais pas par endroits une confusion entre instructions et expressions, notamment dans le cas de la syntaxe des boucles for où tu parles de $i = $i + 1 comme d’une expression ?

Tes exemples d’itération avec les boucles while / for sont erronés, tu prends $ingredientsCookies[0] à chaque itération.

Tu utilises declare(strict_types=1); dans la correction de l’exercice sans expliquer ce que ça fait (c’est présenté au chapitre suivant si je ne me trompe pas).

Les fonctions

Je trouve qu’il est un peu tôt pour parler des types de paramètres / de retour et des types « optionnels » (?int), est-ce que ça n’alourdit pas la syntaxe pour le débutant qui lirait le cours ?
De même pour parler de l’utilisation de static dans les fonctions.

Au cours de la présentation de la fonction require, tu utilises en fait require_once dans les exemples.

« mais vous trouverez des cas où ça peut tout de même être pratique » : il faudrait que le cours présente de tels cas. De manière générale je trouve qu’il manque quelques cas pratiques.

Aussi tu utilises la fonction isset sans l’avoir présentée, il n’est pas évident de comprendre ce qu’elle fait.

C’est un chapitre que j’ai trouvé un peu fouillis, tu commences par présenter certaines fonctions, puis tu expliques comment définir une fonction, tu en présentes d’autres à nouveau, etc.

Lire et écrire des fichiers

Tu cites file_get_contents à la place de file_put_contents dans le paragraphe qui concerne cette dernières.

Aussi tu confonds les modes r et w dans ton tableau. Le tableau ne dit d’ailleurs pas quels modes permettent de lire les fichiers.

Au niveau des droits de fichiers, tu présentes 777 comme un nombre décimal. Il est plutôt à considérer comme nombre octal, 7778777_8 étant égal à 1111111112111111111_2 où l’on retrouve bien les différents droits. Ça donnerait le nombre 511 en décimal.

Super TP: re-créons snake !

Je pense que le snake est un sujet difficile pour un TP aussi tôt dans le cours, peut-être faudrait-il y aller pas à pas ?
Mais c’est une bonne idée de fournir une bibliothèque minimale pour gérer les interactions.

Je trouve que la phrase « des questions correspondant aux choses que je répète et m’efforce à rendre simple seront moins bien reçues sur le forum » est un peu rude, elle aurait tendance à contrarier/renfermer le lecteur je pense.

Enfin je ne comprends pas l’intérêt de la « solution simple » à l’exercice sur les bordures du jeu.


Voilà c’est tout pour moi. Beau travail jusque là, et bonne continuation pour la suite ! :p

Merci pour ta relecture !

J’ai vu quelques fautes de frappe ou d’orthographe mais ne les ai pas relevées

Dommage ^^'

Peut-être devrais-tu parler plutôt de fuseau horaire, et d’expliquer en quoi il est important de le configurer ?

Bien vu, je change et je mets des fuseaux horaires ! Par contre je ne vais pas plus détailler, j’essaie tout au long d’être assez exhaustif mais malheureusement je dois faire l’impasse sur certains sujets pour que le cours reste fluide à assimiler… En tous les cas c’est le choix que j’ai fait.

Lors de la création du premier programme PHP tu demandes à créer un fichier vide dans le dossier, je n’ai pas compris à quoi servait ce fichier puisque ce n’est semble-t-il pas celui qui contiendra le code.

J’ai clarifié, mais si, c’est bien le même fichier qui est "rempli" après :) .

La phrase d’introduction, « Une variable c’est simplement quelque chose qui contient autre chose », est très floue, tu devrais utiliser des termes plus précis que « chose » (« identifiant », « nom », « valeur » ?).

Oui bah pour le coup c’est exactement ce qui vient dans les lignes suivantes. x)

Aussi je me demande s’il n’est pas encore un peu tôt dans le cours pour présenter les tableaux. Globalement je trouve que tu vas un peu vite sur certains points.

Ma foi, j’ai pas mal retourné la chose dans tous les sens et de mon côté je pense que c’est bien dans cet ordre. Après tout est challengeable mais tu n’as rien proposé là.

Les tables logiques de tes opérations booléennes n’ont que 3 lignes, il y manque la ligne true | false.

Ah oui bien vu, j’étais parti du principe que vu que l’ordre n’avait pas d’importance c’était ok mais c’est vrai que certains opérateurs prennent l’ordre en considération… J’ai rajouté les lignes du coup mais je ne suis pas persuadé que ça soit vraiment intéressant… C’est peut être juste déroutant pour les débutants. Je médite encore dessus.

La présentation de ces opérateurs est assez brève, et les exemples éloignés de la réalité.

J’ai cru comprendre que ça posait problème pas mal de gens ici, ouais. Et bah accrochez vous, parce que la suite du cours c’est la POO, et ça ne sera pas du tout "réaliste" ! Courage aux relecteurs !
Pour ce genre de retours je préfère écouter les novices plutôt que les programmeurs agéris :) .

Est-ce que tu ne ferais pas par endroits une confusion entre instructions et expressions, notamment dans le cas de la syntaxe des boucles for où tu parles de $i = $i + 1 comme d’une expression ?

Euh, en soit c’est une expression.

Je trouve qu’il est un peu tôt pour parler des types de paramètres / de retour et des types « optionnels » (?int), est-ce que ça n’alourdit pas la syntaxe pour le débutant qui lirait le cours ?

C’est un parti pris, je pense que c’est pas très compliqué à intégrer et que ça formera de meilleurs développeurs.

De même pour parler de l’utilisation de static dans les fonctions.

C’est dans le but d’être exhaustif… Et aussi car je l’utilise dans le code fourni du TP!

Au cours de la présentation de la fonction require, tu utilises en fait require_once dans les exemples.

Mon dieu, j’ai changé cela en "corrigeant". T_T

C’est un chapitre que j’ai trouvé un peu fouillis, tu commences par présenter certaines fonctions, puis tu expliques comment définir une fonction, tu en présentes d’autres à nouveau, etc.

Encore une fois, c’est un choix: je trouve que présenter des fonctions sans s’arrêter c’est trop lourd…

Aussi tu confonds les modes r et w dans ton tableau. Le tableau ne dit d’ailleurs pas quels modes permettent de lire les fichiers.

Non, j’ai fait le choix d’utiliser w et pas r. Et tous les modes permettent de lire.
Sinon c’est pas un cours sur le binaire/octal/décimal donc oui j’ai pris des raccourcis (c’est assumé, je l’ai spécifié tout de même).

Enfin je ne comprends pas l’intérêt de la « solution simple » à l’exercice sur les bordures du jeu.

C’est l’approche la plus évidente, je voulais juste signaler qu’elle n’était pas fausse.


Voilà, globalement j’ai essayé de faire un maximum de correction par rapport à tes retours, et j’ai répondu aussi sur certains points. Merci de ta relecture elle m’a permis d’améliorer pas mal de points !

⚠️ La version beta est à jour avec les modifs.

+0 -0

Salut, merci pour tes réponses.

Ma foi, j’ai pas mal retourné la chose dans tous les sens et de mon côté je pense que c’est bien dans cet ordre. Après tout est challengeable mais tu n’as rien proposé là.

Nek

En effet je ne fais pas de propositions mais juste quelques commentaires, parce que je constate que le lecteur n’a pas eu l’occasion de manipuler des valeurs simples (par des exercices par exemple) que tu présentes déjà des types composites.
C’est de là que me vient l’impression que ça avance un peu vite.

J’ai cru comprendre que ça posait problème pas mal de gens ici, ouais. Et bah accrochez vous, parce que la suite du cours c’est la POO, et ça ne sera pas du tout "réaliste" ! Courage aux relecteurs !
Pour ce genre de retours je préfère écouter les novices plutôt que les programmeurs agéris :) .

Nek

Je trouve dommage de balayer ce point comme ça, surtout si tu envisages des exemples encore moins réalistes par la suite.

Les retours de novices c’est beaucoup de sujets sur des forums où ceux-ci sont perdus dans des notions de POO, parce qu’ils n’ont appris que des exemples abstraits et/ou faux qui ne s’appliquent pas à la réalité de la programmation objet (des histoires de guerriers et de magiciens, des chats qui héritent d’animaux ou des carrés de rectangles, etc.).

Je pense que l’attente sur ce sujet est justement d’avoir des exemples qui collent avec la réalité de la programmation objet.

Euh, en soit c’est une expression.

Nek

Ah oui, désolé, la confusion venait de moi. :)

Non, j’ai fait le choix d’utiliser w et pas r. Et tous les modes permettent de lire.
Sinon c’est pas un cours sur le binaire/octal/décimal donc oui j’ai pris des raccourcis (c’est assumé, je l’ai spécifié tout de même).

Nek

Dans ce cas les lignes w et w+ dans ton tableau sont en double. Mais alors je trouverais bizarre de n’utiliser que r et r+ dans les exemples et ne pas les faire figurer dans le tableau récapitulatif.

Et ça me semble tout de même étrange de dire que w ne permet pas d’écrire mais permet de lire. Tu es sûr de ne pas confondre w/w+ avec r/r+ ?

J’ai cru comprendre que ça posait problème pas mal de gens ici, ouais. Et bah accrochez vous, parce que la suite du cours c’est la POO, et ça ne sera pas du tout "réaliste" ! Courage aux relecteurs !
Pour ce genre de retours je préfère écouter les novices plutôt que les programmeurs agéris :) .

Nek

Je trouve dommage de balayer ce point comme ça, surtout si tu envisages des exemples encore moins réalistes par la suite.

Les retours de novices c’est beaucoup de sujets sur des forums où ceux-ci sont perdus dans des notions de POO, parce qu’ils n’ont appris que des exemples abstraits et/ou faux qui ne s’appliquent pas à la réalité de la programmation objet (des histoires de guerriers et de magiciens, des chats qui héritent d’animaux ou des carrés de rectangles, etc.).

Je pense que l’attente sur ce sujet est justement d’avoir des exemples qui collent avec la réalité de la programmation objet.

On est sur un sujet extrêmement subjectif qui n’a pas sa place ici puisque c’est moi qui écrit ce cours, et c’est donc normal que ça soit MA façon d’apprendre. Tu juges que ce genre d’approche amène à voir plus d’incompréhension sur les forums, je penses que ça aide juste à mieux comprendre la programmation. Commencer par apprendre ce qu’est une factory n’aidera pas à mieux comprendre… D’ailleurs le jugement de ce à quoi correspond le monde réel ou pas est également sujet à débat.

Bref, j’apprécie vraiment que tu m’ais fait des retours, c’est hyper cool j’ai pu faire plein de modifications pour améliorer le cours… Mais là c’est juste un sujet très subjectif et je n’ai pas l’intention de prendre plus de temps que celà à ce propos (et surtout pas sur ce topic qui n’a pas ce but).

Non, j’ai fait le choix d’utiliser w et pas r. Et tous les modes permettent de lire.
Sinon c’est pas un cours sur le binaire/octal/décimal donc oui j’ai pris des raccourcis (c’est assumé, je l’ai spécifié tout de même).

Nek

Dans ce cas les lignes w et w+ dans ton tableau sont en double. Mais alors je trouverais bizarre de n’utiliser que r et r+ dans les exemples et ne pas les faire figurer dans le tableau récapitulatif.

Et ça me semble tout de même étrange de dire que w ne permet pas d’écrire mais permet de lire. Tu es sûr de ne pas confondre w/w+ avec r/r+ ?

entwanne

Oui non mais en effet j’avai mal lu et relu. C’est corrigé !

Bonjour les agrumes !

Tout d’abord merci @cake-aux-fruits pour ton commentaire, ça fait plaisir. Oui c’est en effet un gros travail d’écriture, réécriture, relecture, réécriture… Je suis assez content du résultat des deux chapitres et je remercie tous ceux qui m’ont aidé et donné des pistes d’amélioration.

Cela étant dit, j’ai fait une petite mise à jour sur le tuto pour ajouter une explication sur les extensions de fichier. C’est tout bête mais je veux que le cours soit compréhensible pour vraiment tout le monde.

Merci d’avance pour vos commentaires.

+0 -0

Bravo pour ce tuto,

Après une lecture très en diagonale du chapitre sur les variables, je remarque cette phrase (un peu longue) et dirficile a lire.

Une variable a un nom se composant de caractères classique (de A à Z en majuscule ou minuscule) et le caractère spécial _ et les nombres (sachant qu’un nom de variable ne peut pas commencer par un nombre !).

Chapitre sur les variables

Le bloc qui suit cette phrase ("PHP supporte aussi les accents, mais tous autres langages ne supportent pas les accents […]") va dans un bloc citation alors que sémantiquement j’aurai utilisé un simple bloc neutre ou d’information pour ça.

Bref c’était juste des remarques rapides et encore Bravo.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte