TD1

SOME TROUBLE?

"What strlen?"

→ Type http://php.net/+strlen

Astuce

Lorsque vous ignorez la signification d'une fonction PHP, comme par exemple strlen, rendez vous simplement à l'adresse php.net/strlen (ajoutez votre fonction ou mot clé à la suite de http://php.net). Vous arriverez alors soit directement sur la page de la fonction soit sur une liste de fonction et éventuellement dans la recherche du site.

Exercice 1: Prise en main

1. La ligne de commande

L'interpréteur PHP peut être utilisé en ligne de commande, ce qui vous permettra de prendre le langage en main et de faire des tests. Créez un fichier hello.php et placez-y le contenu suivant:

<?php
// hello.php
echo "Hello world !\n";

Pour exécutez votre code, lancez dans un terminal:

php hello.php

Le message Hello world! devrait apparaître sur votre écran.

2. Quelques exemples

Parcourez les exemples du dossier exercice1/, lisez bien les commentaires et explications et exécutez les pour en comprendre le comportement.

Exercice 2: Les bases

Comme vu en cours, le tableau (array() ou encore [])
représente la structure de données la plus importante en PHP.

Il est important de maîtriser parfaitement la création et la manipulation de ces tableaux avant de pouvoir aller plus loin.

Ouvrez à présent le fichier functions.php. Ce fichier contient des fonctions dont vous devez écrire le code:

1. somme_entiers($n)

Cette fonction calcule la somme des n premiers entiers et la retourne.

2. somme_tableau($tab)

Cette fonction doit calculer la somme des éléments d'un tableau et la retourner.

3. valeur_min($tab)

Cette fonction doit retourner l'élément le plus petit d'un tableau passé en paramètre.

4. valeur_min_indice($tab)

Cette fonction doit retourner l'indice de l'élément le plus petit d'un tableau passé en paramètre.

5. tri($tab)

Cette fonction trie les éléments du tableau passé en paramètre et les retourne. Elle ne doit pas utiliser les fonctions de tri de PHP, mais doit en revanche utiliser valeur_min_indice($tab).

Note: Comme vous vous en doutez, il s'agit d'un exercice, la fonction ainsi produite ne sera pas très efficace.

Exercice 3: Manipulations de tableaux

Génération d'un jeu de données

Le fichier data.php contient un grand tableau contenant des personnes (nom, prénom et age).

Vous pouvez charger ces données dans un script de cette façon:

<?php
$data = require('data.php');

1. Affichage des données

Ecrivez un premier fichier list.php qui affiche les données sur chaque ligne sous la forme:

* Prénom Nom (Age)
* Prénom Nom (Age)
* Prénom Nom (Age)
...

2. Trouver l'individu le plus jeune

Créez un second fichier youngest.php qui affiche l'individu le prénom, le nom et l'age de l'individu le plus jeune de vos données.

3. Occurences des prénoms

Créez un fichier names.php qui affiche tous les prénoms et leur nombre d'occurences dans le fichier.

Exercice 4: Gestion d'un magasin

Dans cet exercice, on s'intéresse à la gestion d'un magasin. Le code source est en fait un utilitaire en ligne de commande qui permet de naviguer parmi les produits.

Questions

Pour commencer, lisez le code source disponible dans le dossier exercice4/ afin d'en comprendre son fonctionnement.

1. Quel est l'interêt du tableau $actions ? Quelle(s) autre(s) méthode aurait pu être employée ?

Ce tableau permet de faire la correspondance entre les actions données au script et les fonction à appeller. Grâce aux fonctions anonymes (depuis PHP 5.3), cette correspondance peut se faire directement en insérant les fonctions dans le tableau en tant qu'éléments. Un switch/case aurait pu être employé ici, mais la maniabilité n'aurait pas été la même, en effet, l'usage est ainsi capable d'afficher la liste des fonctions disponibles.

2. Dans store.php, on observe des comparaisons utilisant trois signes = "===", à quoi cela sert t-il ?

Cette notation vous permet de comparer le contenu d'une variable ET de son type, par exemple:

<?php

if (0 == null) { // Vrai
    echo "0 == null!\n";
}

if (0 === null) { // Faux
    echo "0 === null!\n";
}

3. Lisez la documentation de implode(), à quoi sert cette fonction ? Comment effectuer l'opération inverse ?

implode() sert à concaténer les éléments d'un tableau à l'aide d'un séparateur. Cette fonction est très utile pour convertir des tableaux en chaînes de caractères lisible, et dans l'autre sens à l'aide de explode() obtenir un tableau depuis une telle chaîne.

4. Observez de plus près l'appel à call_user_func_array, Est-il possible de faire ce genre de chose dans un langage fortement typé tel que le C ou Java ? Pourquoi ?

Non. Cette fonction est un exemple de ce qu'il est possible de faire à l'aide d'un langage de haut niveau et interprété tel que le PHP.

5. Essayez d'ajouter un produit à l'aide de la commande php store.php add nom_du_produit quantité. Comment la liste des produits est-elle sauvegardée ?

La liste des produits est sauvegardée dans products.php, elle est écrite à l'aide de file_put_contents() et de var_export() qui permettent d'écrire la variable dans le fichier telle quelle.

Implémentation

1. Définition du prix

Ajoutez une commande "php store.php set-price [product] [price]" qui définit le prix d'un produit.

2. Pouvoir enlever des produits

Implémentez une commande "php store.php remove [product] [quantity]" qui enlève quantity produit de nom product du magasin.

3. Ajout de description

Modifiez le code de manière à ajouter une entrée "description" dans le tableau de chaque produit et ajoutez une commande
"php store.php set-description product "description du produit"" qui permet de définir la description d'un produit.

4. Recherche de produits

Créez une commande "php store.php search [keyword]" qui permet d'effectuer une recherche parmi les produits du magasin par nom ou description et qui affiche la liste des résultats.

5. Import et export CSV

Un fichier CSV est un tableau délimité du type:

"produit1";"12";"32"
"produit2";"102";"11"

A l'aide des fonctions fgetcsv et fputcsv, ajoutez une commande "php store.php import [fichier.csv]" et "php store.php export [fichier.csv]" pour importer et exporter la liste des produits au format CSV.