Les bases
Travaux pratiques
L'objet
Exercices
Travaux Pratique 2
Conclusion

Nous allons découvrir aujourd'hui ce qu'est le langage PHP et quels sont ses avantages mais aussi ses inconvénients.

Qu'est ce que PHP ?

Selon Wikipedia

PHP (PHP: Hypertext Preprocessor) est un langage de programmation libre, principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet.

PHP est donc un langage que l'on va principalement utiliser pour générer des pages Web et créer des sites Web dynamiques (mais cela ne veut pas dire que l'on ne pourra pas l'utiliser pour autre chose). C'est un langage qui est interprété et qui aura donc besoin d'un interpréteur pour fonctionner.

PHP dispose d'un typage dynamique. Il n'est donc pas nécessaire de déclarer le type des variables et c'est l'ordinateur qui va se charger de définir le type de manière automatique (ce type de typage permet d'avoir un code plus rapide à écrire mais ce gain se fait au prix d'un impact sur les performance et la stabilité du code).
Cependant, depuis PHP 7 il est possible d'indiquer le type des paramètres des fonctions ce qui permet de contre-balancer un des inconvénient de ce type de typage en apportant une meilleur organisation et stabilité du code.

A quoi ça ressemble ?

PHP est un langage un peu particulier car il peut se comporter comme un langage de programmation classique mais aussi comme un moteur de template. On peut le mélanger à du code HTML afin de générer des pages dynamique :

<table>
  <tr>
    <th>Nom</th>
    <th>Classe</th>
    <th colspan="12">Notes</th>
    <th>Moyenne</th>
  </tr>
  <?php foreach($eleves as $eleve): ?>
  <tr>
    <td><strong><?= $eleve['name'] ?></strong></td>
    <td><?= $eleve['class'] ?></td>
    <?php foreach($eleve['notes'] as $note): ?>
      <td><?= $note ?>/20</td>
    <?php endforeach; ?>
    <td><strong><?= round(array_sum($eleve['notes']) / count($eleve['notes'])) ?></strong>/20
  </tr>
  <?php endforeach; ?>
</table>

Ou on peut le retrouver dans une structure plus classique :

<?php
class OpenWeather {

    private $apiKey;

    public function __construct(string $apiKey)
    {
        $this->apiKey = $apiKey;
    }

    public function getToday(string $city): ?array
    {
        $data = $this->callAPI("weather?q={$city}");
        return [
            'temp' => $data['main']['temp'],
            'description' => $data['weather'][0]['description'],
            'date' => new DateTime()
        ];
    }

    public function getForecast(string $city): ?array
    {
        $data = $this->callAPI("forecast/daily?q={$city}");
        foreach($data['list'] as $day) {
            $results[] = [
                'temp' => $day['temp']['day'],
                'description' => $day['weather'][0]['description'],
                'date' => new DateTime('@' . $day['dt'])
            ];
        }
        return $results;
    }

    private function callAPI(string $endpoint): ?array
    {
        $curl = curl_init("http://api.openweathermap.org/data/2.5/{$endpoint}&units=metric&lang=fr&APPID={$this->apiKey}&units=metric&lang=fr");
        curl_setopt_array($curl, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CAINFO => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'cert.cer',
            CURLOPT_TIMEOUT => 1
        ]);
        $data = curl_exec($curl);
        if ($data === false || curl_getinfo($curl, CURLINFO_HTTP_CODE) !== 200) {
            throw new APIException();
        }
        return json_decode($data, true);
    }

}

Mais PHP c'est vieux et c'est nul !

PHP est un langage que beaucoup aime moquer à cause d'un passé un peu particulier. Le langage est resté simple pendant un moment et n'offrait pas forcément les possibilités qu'il offre aujourd'hui. Il a donc acquis la réputation d'un langage "jouet" réservé aux novices mais il a subit beaucoup de changement depuis et est aujourd'hui un langage beaucoup plus solide que par le passé. Si vous voulez en apprendre plus sur les arguments pour et contre PHP je vous renvois sur cette vidéo