Developpez.com - Rubrique PHP

Le Club des Développeurs et IT Pro

Cours complet pour débutants pour apprendre à programmer en PHP 7

Par Serge Tahé

Le 2019-07-10 20:38:13, par Serge Tahé, Expert éminent
Bonjour,

J'ai mis à l'URL [https://tahe.developpez.com/tutoriels-cours/php7/] un cours intitulé [Introduction au langage PHP7 par l'exemple].

Il aborde les thèmes suivants :

  • chap 3 : les bases du langage ;
  • chap 5 : les classes ;
  • chap 6 : les interfaces ;
  • chap 7 : les exceptions et erreurs ;
  • chap 9 : les traits ;
  • chap 10 : applications en couches ;
  • chap 12 : utilisation du SGBD MySQL ;
  • chap 16 : programmation internet ( HTTP, SMTP, POP, IMAP) ;
  • chap 17 : services web jSON, XML ;
  • chap 21 : XML ;


Ces chapitres sont illustrés par 12 versions d’une application de calcul d’impôt qui sert de fil rouge au document :

  • chap 4 : versions 1 et 2, implémentation du calcul d’impôt avec des scripts PHP procéduraux classiques ;
  • chap 8 : version 3, implémentation du calcul d’impôt avec des classes et interfaces ;
  • chap 11 : version 4, implémentation du calcul d’impôt avec une architecture en couches ;
  • chap 13 : version 5, implémentation du calcul d’impôt avec une architecture en couches et une base de données MySQL ;
  • chap14 et 15 : versions 6 et 7, implémentation du calcul d’impôt avec une architecture en couches et une base de données PostgreSQL ;
  • chap 18 et 19 : versions 8 et 9, implémentation du calcul d’impôt avec une architecture client / serveur jSON et une base de données ;
  • chap 20 : version 10, implémentation du calcul d’impôt avec une architecture client / serveur jSON, une base de données et un serveur de cache Redis ;
  • chap 22 : version 11, implémentation du calcul d’impôt avec une architecture client / serveur XML, une base de données et un serveur de cache Redis ;
  • chap 23 : version 12, implémentation du calcul d’impôt avec une architecture web MVC (Model – View – Controller), une base de données et un serveur de cache Redis. Le serveur produit indifféremment et à la demande un flux jSON, XML ou HTML ;


Le document est destiné à des personnes de niveau débutant ou intermédiaire en PHP.

Il remplace un document ancien (2015) [Introduction au langage PHP5 par l'exemple] toujours disponible à l'URL [https://tahe.developpez.com/tutoriels-cours/php5/]

Serge Tahé
  Discussion forum
2 commentaires
  • rawsrc
    Expert éminent sénior
    Salut Serge

    Merci pour le gros travail accompli parce que c'est toujours très compliqué d'organiser un tel volume de connaissances et en plus c'est un autre tour de force que d'être capable de la restituer à un public débutant. Chapeau bas l'artiste.
    J'ai une remarque à faire concernant le fait que t'aies privilégié pour le rendu l'usage de print en lieu et place de echo.

    Les deux structures du langage ne se comportent pas de la même façon et il faut tenir compte des différences.
    Il est préférable pour le rendu d'utiliser echo pour plusieurs raisons :
    - echo est un poil plus rapide que print,
    - l'écart vient du fait que print se comporte comme une fonction et renvoie toujours une valeur de retour alors qu'echo ne se content que d'afficher,
    - echo permet d’enchaîner les valeurs à afficher : echo $nom, ' ', $prenom, ' 1245 ab', 'c'; alors que print ne le permet pas (l'enchaînement est plus véloce que la concaténation qui nécessite plus d'allocation mémoire))

    Quelques examples :
    Code :
    1
    2
    3
    $x = print 'abc';  // ici $x = 1
    // ce qui va conduire à des trucs de ce genre 
    print print print 25; // cela va afficher 2511 -> bonjour le débogage


    Enfin la notation courte <?= 'abc' ?> est juste l'équivalent de <?php echo 'abc' ?> et comme c'est une recommandation forte depuis PHP 5.4, je te conseille et à vous tous de ne pas utiliser print pour l'affichage et opter pour echo qui a été optimisé pour.
    Bref, print est a utiliser uniquement quand vous avez une excellente raison de le faire.

    ---
    Au sein d'un même script tu devrais éviter de mélanger les notations longues et courtes :
    Code :
    1
    2
    $limites = array(9964, 27519, 73779, 156244, 0);
    $result = ["marié" => $marié, "enfants" => $enfants, "salaire" => $salaire] + $result;
    Dorénavant, il est préférable de privilégier la notation tableau standard à tous les langages : [ ... ] à l'ancienne array ( ... ) ; le mot clé array n'est a réserver que pour le typage stricte.

    ---
    Pour les espaces de noms, je t'invite à lire un billet sur mon blog espaces de nom et autoloader/ qui aborde principalement ce sujet, car dans ton code tu fais use \Exemples\Personne; ce qui est fortement déconseillé car la spécification du PHP précise que la structure du langage use attend toujours un chemin absolu (aucun risque de chemin relatif) en conséquence le premier \ est un pléonasme

    ---
    Dans ce code :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // test
    // création d'un tableau d'objets Personne et dérivés
    // pour la simplicité de l'exemple, on ne gère pas les exceptions
    $groupe = array(new Enseignant("Paul", "Langevin", 48, "anglais"), new Personne("Sylvie", "Lefur", 70));
    
    // identité de ces personnes
    for ($i = 0; $i < count($groupe); $i++) {
       print "groupe[$i]=$groupe[$i]\n";
    }
    // fin
    plusieurs remarques :
    - notation longue pour array,
    - il est préférable (et de loin) d'utiliser foreach () pour parcourir intégralement un tableau
    - dans ton code, à chaque tour le moteur doit évaluer count($groupe) et ce autant de fois que de boucles : il aurait été préférable de faire for ($i = 0, $nb = count($groupe) ; $i < $nb ; ++$i) {.

    ---
    Tu dois toujours écrire explicitement la visibilité des fonctions : static function say, se contenter de la visibilité par défaut peut s'avérer risqué : public static function say.

    ---
    Dans la partie Programmation orientée objet, je n'ai pas vu de paragraphe sur le polymorphisme (vu l'heure, je suis peut-être aussi miro ^^)

    Bonne lecture à tous
  • viper1094
    Membre éclairé
    Ca ne m'intéresse absolument pas, mais merci beaucoup pour le partage de savoir qui, j'en suis sur, servira à plein de monde.