PHP 101

On ne peut nier que notre secteur est extrêmement difficile. Avez-vous déjà envisagé d'apprendre une langue seconde? Eh bien, qu'en est-il cinq? C’est ce qui vous sera demandé si vous souhaitez devenir un développeur Web moderne. Compte tenu de cela, si vous ne faites pas attention, très rapidement, vous risquez de vous sentir dépassé par la vue aveugle d'innombrables articles de blogues déroutants ou de livres techniques..

La clé, comme pour tout, est de faire un pas à la fois.

La clé, comme pour tout, est de faire un pas à la fois. Seriez-vous en faute de ne pas apprendre une langue parlée dans un mois? Bien sûr que non. Appliquez ensuite le même niveau de réflexion à votre parcours de programmation. Ces choses prennent du temps, mais tant que vous continuez à avancer, vous serez là en un rien de temps. Ne t'arrête pas!

La première étape est HTML. Comprendre à quoi sert un

sert. Apprenez à structurer le contenu à l'aide de balises sémantiques. Construire une page Web basique et sans style.

La deuxième étape, comme vous l'avez peut-être deviné, est CSS. Apprenez à styliser des éléments sur la page. Appréciez la "séparation des préoccupations" et son application à votre code HTML et CSS. Complétez votre premier site web simple.

La troisième étape est le moment où les développeurs commencent à s'orienter vers leurs propres spécialités. À ce stade, vous pouvez vous plonger dans le monde de JavaScript, qui est en plein essor comme jamais auparavant. Ou, vous pouvez plutôt concentrer vos efforts sur le backend.

Confus par la différence entre l'extrémité avant et backend? Pensez au front-end comme à la pointe de l'iceberg qui a abattu le Titanic. C'est la partie de l'application qui est visible pour l'utilisateur et avec laquelle on peut interagir. Le backend, quant à lui, gère tout, de la persistance aux validations, en passant par le routage.

Pour les besoins de cet article, supposons que vous ayez choisi la dernière option. le côté serveur, c'est!

On ne peut nier le fait que PHP domine le Web.

Malheureusement, encore une fois, vous rencontrez une poignée de chemins à emprunter. Devez-vous choisir l'option la plus populaire - PHP? Qu'en est-il de Ruby? Les enfants cool semblent préférer que ces jours-ci. Et encore, si vous avez une barbe? Est-ce que Python est le bon choix? Mais surtout, comment pourriez-vous faire une sélection quand vous n’avez aucune expérience??

Dans des situations comme celle-ci - et de l'avis de l'auteur - il n'y a pas de mauvais choix. Et, certainement, rien ne vous empêche de changer de voie. En fait, tous les développeurs sont encouragés à apprendre plusieurs langues! Pour l'instant, cependant, la clé est de n'en choisir qu'un et de bien l'apprendre..

S'il est vrai que PHP n'est pas la plus belle des langues, force est de constater qu'il domine le Web. En fait, c'est le langage de script le plus populaire au monde. L'avantage de ceci est que vous pouvez être assuré que chaque question PHP a déjà été posée, résolue et documentée. Il y a du réconfort à savoir cela. Bien que vous soyez au stade le plus fragile de votre apprentissage, une communauté massive et conviviale est à votre porte, prête à vous aider. Mieux encore, PHP connaît une renaissance moderne comme jamais auparavant, grâce à des outils tels que Composer et Laravel..


Qu'est-ce que PHP?

PHP, un acronyme pour PHP: préprocesseur hypertexte (oui, les développeurs adorent leurs blagues récursives), est un langage de script spécialement conçu pour le Web. Les chances sont élevées, cependant, que cela ne signifie toujours rien pour vous. Langage de script? Hein? Quand voudriez-vous atteindre PHP avec un simple HTML? Eh bien, peut-être un exemple est en ordre. En supposant que vous ayez installé PHP avec succès, créez un index.php fichier dans un nouveau dossier sur votre bureau et ajoutez:

 

Oui, c'est l'omniprésent "Bonjour le monde"exemple avec lequel vous vous familiariserez avec les progrès de vos compétences. Chaque langage / framework / outil a un!

Pour exécuter ce code, utilisez le serveur intégré de PHP. Basculez vers votre outil de ligne de commande préféré (Terminal, pour les utilisateurs de Mac), CD dans le dossier du projet et démarrez le serveur avec php -S localhost: 8888. Cette commande se traduit par "Exécutez un serveur et rendez-le accessible depuis mon navigateur sur le port 8888 de l'hôte localhost. "Allez-y et essayez-le! Ouvrez Google Chrome, accédez à localhost: 8888, et vous verrez "Bonjour tout le monde * "sur la page! Nifty! écho est une construction de langage qui ne fait rien d'autre que générer une valeur donnée.

Pointe: MAMP et WAMP sont d'excellentes solutions en un clic pour installer PHP, MySQL et Apache sur votre Mac ou votre PC, sans avoir à tâtonner avec la ligne de commande. Ils peuvent être des choix utiles au début de votre apprentissage.

WampServer est un environnement de développement qui permet une installation en un clic de PHP, Apache et MySQL..

Certes, ce n'est pas la chose la plus excitante au monde. En fait, vous pensez probablement à vous-même, "Pourquoi n'ai-je pas pu écrire 'Hello world' directement dans la page HTML et supprimer le besoin de PHP tous ensemble?"C’est vrai; pour cet exemple, cela ne sert à rien. Cependant, un langage de script comme PHP devient particulièrement utile lorsque le résultat doit être de nature dynamique. Et si, plutôt que monde, vous souhaitez que le message d'accueil fasse référence à une valeur transmise par la chaîne de requête de l'URL (le texte de la barre d'adresse situé après le point d'interrogation). Voici un exemple mis à jour, qui accomplit juste cela!

 

Ahh, cela introduit quelques nouvelles techniques. Premièrement, la seule période qui sépare le Bonjour chaîne et déroutant $ _GET vous permet de concaténer (ou de grouper) des valeurs. Dans ce cas, nous souhaitons imprimer "Bonjour, * "et ensuite la valeur représentée par $ _GET ['personne']. C’est ce que nous appelons un tableau super-global. Par souci de simplicité, considérez cela comme un moyen de * GET une valeur de la chaîne de requête de l'URL.

Testez-le en chargeant localhost: 8888 /? person = Joe. Si configuré correctement, la page Web devrait maintenant afficher "Bonjour joe."Jouez avec en remplaçant Joe avec votre propre nom. Remarquez comment la sortie est mise à jour chaque fois que la page est actualisée? Cela ne serait tout simplement pas possible avec du HTML statique.

L'une des clés de la programmation évoluée consiste à envisager tous les chemins possibles dans votre code. Par exemple, si non la personne la clé est disponible? Peut-être que la chaîne de requête a été entièrement omise. Dans ce cas, une erreur sera certainement jetée, car le la personne la clé n'existera pas. Quelle est la solution? Il est vrai que ce n’est rien de plus qu’un simple exemple, mais il est toujours important d’examiner tous les résultats possibles. Fournissons un défaut.

 

Bien qu'il existe des moyens plus rationnels de permettre cela, l'exemple ci-dessus est un excellent point de départ. C'est aussi votre première introduction aux instructions conditionnelles. Abordez votre code de la même manière que vous géreriez des scénarios dans la vie réelle. Par exemple, "Si nous n'avons plus de lait, allez au magasin. Sinon, restez à la maison."Cette ligne de pensée pourrait être traduite en PHP, en utilisant la logique suivante:

$ outOfMilk = true; if ($ outOfMilk) echo 'Aller au magasin.';  else echo 'Le petit-déjeuner est servi.' 

Dans ce morceau de code, une seule ligne de texte sera imprimée à l'écran. La valeur de la variable (une valeur dynamique), $ sur le lait, déterminera le flux de contrôle.

Pointe: Pour déclarer des variables en PHP, faites précéder tout nom d’un signe dollar. Comme meilleure pratique, optez pour des noms de variables lisibles par rapport aux alternatives cryptiques..

Revenons à l'exemple précédent, tant que $ _GET ['personne'] est défini (pensez à cela comme un pseudo-nom pour "est disponible"), puis créez un nouveau $ personne variable égale à sa valeur. Sinon, appliquez une valeur par défaut. Si vous revenez au navigateur, il devrait maintenant fonctionner correctement, que le la personne la clé existe dans la chaîne de requête.

Sécurité

Malheureusement, nous ne sommes toujours pas libres. L'une des meilleures pratiques de programmation consiste à placer la sécurité au premier plan de chaque action. Même avec cet exemple incroyablement basique, nous avons ouvert la porte à l'un des problèmes de sécurité les plus répandus sur le Web: le script XSS (Cross-Site Scripting). Une véritable compréhension de cela dépasse tout à fait la portée de cette leçon d’introduction (des livres entiers y ont été écrits), cependant, voici une illustration de base: $ _GET ['personne'] est égal à, pas une chaîne, mais un script?

http: // localhost: 8888 /? person =

Comme cette valeur n’a pas été vérifiée, lors de son exécution, dans certains navigateurs, un message d’alerte sera affiché..

Les navigateurs Webkit (pensez à Chrome et Safari) offrent maintenant une protection contre ce type d'attaque. Cependant, cela n'a pas toujours été le cas et n'est toujours pas dans Firefox et Internet Explorer.

Beurk! Nous ne pouvons pas avoir ça. Alors que la société moderne affirme qu'un homme est innocent jusqu'à preuve du contraire, il n'en va pas de même pour le monde de la programmation. Toute entrée d'utilisateur est coupable jusqu'à ce qu'elle soit désinfectée! Voici un exemple mis à jour qui fait cette chose même:

 

Avec cette modification, si quelqu'un tentait une attaque XSS, nous serions prêts! htmlspecialchars est une fonction PHP native qui traduit divers symboles en leurs contreparties d'entité. Et devient Et, < devient <, etc. Cela en fait l'outil idéal pour fournir ce petit plus de sécurité.

Génial; pas de mal!


Les fonctions

Bien que PHP soit livré avec une pléthore de fonctions natives, vous aurez certainement besoin de créer les vôtres. Heureusement, ils sont faciles à écrire.

Pensez à une fonction en tant que logique réutilisable pouvant être extraite de manière à pouvoir être identifiée et appelée, à l'aide d'un nom lisible..

Peut-être que vous dirigez une boîte de nuit (probablement pas si vous lisez ceci!) Et avez besoin d’un moyen simple d’accepter la date de naissance d’une personne et de calculer s’il a au moins vingt-et-un ans. Une fonction personnalisée serait un excellent moyen d'accomplir cette tâche.

La première étape consiste à définir une nouvelle fonction, appelée isAdult. Les fonctions peuvent accepter des entrées extérieures, qui peuvent ensuite être utilisées. Cela permet aux données renvoyées par la fonction d'être dynamiques. Dans ce cas, pour déterminer si une personne est un adulte, nous devons connaître son année de naissance. La dernière étape consiste à retourner soit vrai ou faux, selon que l'année en cours, moins la date de naissance de la personne, est au moins de vingt et un.

fonction isAdult ($ yob) $ currentYear = 2013; return $ currentYear - $ yob> = 21; 

C'est vraiment très simple! Maintenant, il ne nous reste plus qu'à le transmettre au videur. Une fonction peut être déclenchée ou appelée en référençant son nom, suivie d'un ensemble de parenthèses: isAdult (). Cependant, si la fonction nécessite un argument, vous pouvez le spécifier entre parenthèses, comme illustré ci-dessous:

if (isAdult (1985)) echo 'Entrez!';  else echo 'S'il vous plaît, partez maintenant, avant que j'appelle votre mère.'; 

Il y a un problème criant avec cette isAdult une fonction. L'année en cours a été codée en dur. Bien sûr, cela fonctionnera tout au long de 2013, mais qu'en sera-t-il de l'année prochaine? Il semble que cette valeur aussi doit être dynamique. PHP fournit un rendez-vous amoureux fonction, qui peut être utilisée pour calculer l'année en cours. En tant que telle, la fonction peut être mise à jour pour:

fonction isAdult ($ yob) $ currentYear = date ('Y'); return $ currentYear - $ yob> = 21; 

Tableaux

Quelques mois plus tard, la boîte de nuit se porte mieux que jamais. En fait, ça va tellement bien que le videur ne peut pas suivre. Son travail pourrait être plus facile s'il pouvait plutôt filtrer à travers un groupe de personnes à la fois..

Pensez à un tableau comme un conteneur pour les données associées. Vous pouvez même vous y référer en tant que liste: une liste de tweets, un groupe de membres de la famille, un tableau de dates de naissance.

Un tableau dans la dernière version de PHP (5.4) peut être défini en utilisant une liste séparée par des virgules entre crochets, comme suit:

groupe $ = [1985, 1990, 1992, 1997];

Ce single groupe $ variable contient maintenant plusieurs dates de naissance. On peut accéder aux valeurs qu’il contient en spécifiant un index, tel que $ group [0]. Les tableaux sont ce que nous appelons une base zéro. En traduction, cela signifie que le premier élément, ou clé, du tableau aura un index de zéro. En tant que tel, pour accéder à la valeur de 1992, vous référencez $ groupe [2].

Maintenant, le videur peut filtrer rapidement ces dates de naissance et calculer s'il convient de laisser la personne entrer ou de la rejeter. UNE pour chaque déclaration pouvant être utilisée pour ce type de filtrage.

groupe $ = [1985, 1990, 1992, 1997]; foreach ($ group as $ yob) if (isAdult ($ yob)) echo 'Entrez!';  else echo 'S'il vous plaît, partez maintenant, avant que j'appelle votre mère.'; 

Remarquez comment le videur déclare que l'année de naissance pour chaque personne dans le groupe devrait être contenu dans la variable, $ yob. Ensuite, comme il l’a fait auparavant, il transmet cette valeur à la isAdult fonction, et procède en conséquence.

Il est toutefois possible que le videur devienne confus s’il n’a pas de lien entre l’année de naissance de la personne et son nom. PHP autorise également les tableaux associatifs, qui fournissent les fonctionnalités nécessaires pour associer une valeur donnée à une clé. Voici un exemple:

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997];

C'est mieux. En prime, le videur peut être un peu plus convivial avec la personne, maintenant qu'il connaît son nom..

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997]; foreach ($ group en tant que $ name => $ yob) if (isAdult ($ yob)) echo "Entrez, $ name!";  else echo "S'il vous plaît, partez maintenant, $ name, avant que j'appelle votre mère."; 

Lorsque vous stockez des chaînes entre guillemets, vous pouvez imbriquer des variables plutôt que d'utiliser la concaténation. Cela peut se prêter à une syntaxe plus lisible.


Des classes

La programmation orientée objet va bien au-delà de la portée de ce tutoriel, mais les classes méritent néanmoins une mention. Pour le moment, considérez-les comme de simples conteneurs de propriétés et de méthodes associées. Par exemple, voici à quoi pourrait ressembler une classe représentant une seule personne:

classe Person public $ name; public $ age; fonction publique __construct ($ name, $ age) $ this-> name = $ name; $ this-> age = $ age; 

Remarquerez que __construction() méthode? Cela s'appelle une méthode magique et sera déclenché immédiatement après l'instanciation. Lorsque cette méthode se déclenche, elle accepte un nom et un âge, puis l'attache à l'objet..

Pour utiliser cette classe, essayez:

$ me = nouvelle personne ('Jeffrey', 28);

Cela créera une nouvelle instance du La personne classe. Cette instance, qui est stockée dans la $ moi variable, peut être appelé un objet. Maintenant, rien ne vous empêche de créer plusieurs instances de cette classe - et, en fait, dans les projets du monde réel, vous le ferez! La classe est juste un plan.

À ce stade, cependant, la classe n'est pas très utile. Ajoutons une méthode ou fonction pour désigner le conjoint d'une personne.

classe Person public $ name; public $ age; conjoint public $; fonction publique __construct ($ name, $ age) $ this-> name = $ name; $ this-> age = $ age;  fonction publique marier (personne $ conjoint) $ this-> conjoint = $ conjoint;  $ me = new Person ('Jeff', 28); $ her = new Person ('Allison', 28 ans); $ me-> marie ($ elle);

Ce code modifié inclut maintenant un marier() méthode qui mettra à jour un $ conjoint propriété sur l'objet. Maintenant, vous avez un lien direct entre les deux personnes.

Si un argument de méthode est précédé d'un nom de classe (Personne $ conjoint), appelée indication de type, indique que le paramètre doit être une instance de la classe donnée ou une erreur sera renvoyée.

Pour chercher le nom de mon épouse, tu pourrais écrire:

echo $ me-> conjoint-> nom; // Allison

Le concept de programmation orientée objet va beaucoup plus loin que cela, mais restons simple pour l'instant. Il est utile de penser aux classes en tant que noms singuliers: un tweet, un utilisateur, un client ou un fichier..

La véritable appréciation de ce modèle ne viendra qu'avec le temps.

Mains sur

Mettez vos nouvelles compétences à l'épreuve. Comment pouvez-vous vous inscrire et afficher des tweets pour un utilisateur sur la page? Eh bien, la première étape pourrait être de définir une classe qui représente un seul Tweet. Cette classe doit stocker les propriétés du corps du tweet, ainsi que sa date de publication. De plus, vous devez vous assurer que le corps du tweet ne dépasse pas 140 caractères. Voici un premier coup de poignard à une telle classe:

classe Tweet public $ body; public $ pubDate; fonction publique __construct ($ body) $ this-> setBody ($ body); $ this-> setPubDate (new DateTime);  fonction publique setBody ($ body) if (strlen ($ body)>> 140) jette new InvalidArgumentException;  $ this-> body = $ body;  fonction publique setPubDate (DateTime $ date) $ this-> pubDate = $ date-> format ('Y / m / d H: i: s'); 

Bien que cela puisse au premier abord sembler accablant, étudiez cet extrait de code et essayez de comprendre ce qui se passe à chaque étape du processus. Vous pouvez trouver que c'est assez lisible!

Une nouvelle fonctionnalité intéressante découle de la setBody méthode. Si le texte fourni dépasse 140 caractères, calculés à l'aide de PHP Strlen fonction, alors nous devrions prendre exception à cela, car il enfreint les règles d'un tweet. Une exception peut être levée en utilisant la syntaxe, lancer un nouveau type d'exception.

Maintenant que nous avons un conteneur assez convenable pour un tweet, nous pouvons créer deux tweets, les stocker dans un tableau, puis les restituer sur la page, en utilisant un pour chaque déclaration.

$ tweets = []; # ajouter deux nouveaux tweets au tableau $ tweets [] = new Tweet ('Aller au magasin.'); $ tweets [] = new Tweet ('Retour du magasin!'); # Filtrer et afficher sur la page. foreach ($ tweets en $ tweet) echo "

$ tweet-> body

"; écho "

Publié le: $ tweet-> pubDate

";

Lors de l'affichage de la sortie dans le navigateur, vous devriez voir quelque chose comme:

Excellent, mais comment pouvons-nous enregistrer ces tweets?


Espace de rangement

Jusqu'à présent, vous avez appris l'essentiel: les variables, les conditions, les fonctions, les tableaux, les classes. Il y a plus à couvrir, mais vous devriez le faire vous-même, au besoin. La prochaine étape de votre apprentissage est la persistance. Par exemple, comment pourriez-vous conserver un journal de tous les tweets? Un service de tweet qui ne fonctionne pas rappelles toi les tweets sont terribles! C’est là que l’idée de bases de données entre en jeu.

Pensez à une table de base de données comme une feuille de calcul Excel. Il peut contenir n'importe quel nombre de champs, tels que le nom, l'âge ou l'adresse postale de la personne. Cependant, PHP ne fournit pas ce type de stockage de manière native. L'option la plus courante est MySQL, la base de données open source la plus populaire au monde..

L'installation de MySQL n'entre pas dans le cadre de ce tutoriel. Reportez-vous plutôt à ce tutoriel sur Nettuts + pour une visite complète..

Voici un exemple simplifié pour vous familiariser avec l'extraction sécurisée de lignes d'une table de base de données. Ne vous inquiétez pas si cela semble écrasant. MySQL est votre deuxième nouvelle langue à apprendre. L'API PDO de PHP, ainsi que le langage de requête lui-même, nécessitent du temps pour apprendre.

D'abord, vous aurez besoin d'un moyen de vous connecter à la base de données..

function connect () $ conn = new PDO ('mysql: host = localhost; nombase = DB_NAME', 'USERNAME', 'PASSWORD'); $ conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); return $ conn; 

PDO est l'une des trois API disponibles pour la connexion à une base de données MySQL..

Ensuite, nous allons ajouter une fonction d'assistance pour récupérer tous les enregistrements de la table des tweets. Portez une attention particulière à la question argument de la méthode, SELECT * FROM tweets. C'est un langage spécial pour interroger la base de données. Dans ce cas, nous utilisons le * symbole pour référencer toutes les lignes. En tant que tel, nous sélectionnons toutes les lignes de la table, appelées tweets.

Cette fonction prépare la requête, puis extrait le jeu de résultats complet..

fonction fetchTweets ($ conn) $ stmt = $ conn-> query ('SELECT * FROM tweets'); return $ stmt-> fetchAll (PDO :: FETCH_OBJ); 

Maintenant, avec la mise en scène, il suffit d'appeler les fonctions, en conséquence.

# Connectez-vous à la base de données $ conn = connect (); # Récupère toutes les lignes de la table des participants var_dump (fetchTweets ($ conn));

Un moyen facile de vider le contenu d’une variable consiste à utiliser le var_dump une fonction. Si vous passez la sortie de fetchTweets ($ conn) Pour cette fonction, lorsque vous la visualisez dans le navigateur, vous verrez quelque chose comme:

var_dump est utile pour le débogage, mais pour la production, il est préférable de filtrer les résultats et de les afficher correctement sur la page. le pour chaque déclaration, que vous connaissez déjà, gérera bien le travail!

$ tweets = fetchTweets ($ conn); foreach ($ tweets en $ tweet) echo "

$ tweet-> body

"; écho "

$ tweet-> pubDate

";

Conclusion

Comme pour toute compétence, écrire couramment en PHP ne demande rien de plus que votre temps. Il faudra peut-être des centaines d’heures pour bien comprendre, mais c’est bien. C'est amusant, non? CA devrait etre!

La meilleure façon d'apprendre est de faire. Construisez des projets comme ceux qui se démodent! Les techniques décrites dans ce didacticiel vous guideront tout au long de la première phase. Toutefois, à mesure que vos compétences progressent, vous passerez à des sujets plus avancés, tels que les frameworks PHP, les modèles de conception et le développement piloté par les tests. S'amuser!

Tuts suggérés + ressource Premium

  • Le développeur PHP moderne
  • Principes fondamentaux de PHP
  • Essentials SQL