Beaucoup de mes cours ont été centrés sur Java. D'où l'envie de me renforcer en PHP -- d'autant qu'en entreprise, je travaille beaucoup sous Symfony et Magento. Je me suis donc offert un cours PHP sur Pluralsight. Le spaceship operator, vous connaissez ?

Pluralsight est site américain d'enseignement en ligne, tourné exclusivement vers le partage de compétences informatiques. Il y en a pour tous les goûts : réseau, développement, applicatif.

Chaque module se présente sous la forme d'une série de vidéos, totalisant généralement une durée de 2-3 heures. Les modules s'organisent eux-mêmes en paths, sortes d'itinéraires balisés au long cours. Quelques exemples : Java EE Foundations (31 heures de vidéos), Windows Group Policy Administration (18 h), Ethical Hacking Fundamentals (79 h !). Le plus difficile, s'est encore de limiter ses ambitions. Et de s'y tenir.

La qualité d'ensemble est très bonne, à tel point que mes collègues de bureau ont décidé de se partager un abonnement (30 euros / mois pour le commun des mortels). Eh oui, malheureusement, c'est payant. Toutefois, il est assez facile de dénicher des propositions de périodes d'essai gratuites, généralement de 1 à 3 mois.

Mais revenons-en à mon cours, PHP Fundamentals. Rien de fracassant là-dedans, mais j'ai quand même pris quelques notes.

Les opérateurs

Je les connaissais déjà pour la plupart, mais je sais maintenant les appeler par leur petit nom, et en anglais s'il-vous-plaît. Pratique pour cibler ses recherches sur StackOverflow.

  • -> : Object operator

  • :: : Scope resolution operator

    Permet d'accéder aussi bien aux constantes de classes (MyClass::MY_CONSTANT) qu'aux membres statiques (MyClass::$myStaticVariable ou MyClass::$myStaticFunction()).

  • => : Array operator

  • =, +=, *=, **= etc. : Assignment operators

    Note : ** permet l'exponentiation. Ainsi, 2**3 donne 8.

  • .= : String operator

  • == / !== : Equal to / Identical to

    Rappel : Identical to effectue un contrôle strict sur le type.

  • <=> : Spaceship operator

    Je n'en avais jamais entendu parler, de celui-là ! $varA <=> $varB retourne 0 si $varA == $varB, -1 si $varA < $varB, et 1 si $varA > $varB.

  • ? : : Ternary operator

    Comme dans $output = count($resultats) > 0 ? print_r($resultats, true) : 'Aucun résultat';

  • ?? : Null coalesce operator

    Comme dans $output = $variableA ?? $variableB ?? $variableC;

    Je n'avais pas réalisé qu'on pouvait chaîner ainsi cet opérateur. Cela peut s'avérer très pratique pour traiter, par exemple, les données d'un formulaire: si la case A n'a pas été remplie, on regarde si la case B l'a été, etc.

Les syntaxes alternatives des structures conditionnelles

Je les utilise rarement, car j'ai rarement affaire à du code mélangeant traitement et présentation, mais c'est toujours bon à savoir.

if ($conditionA) {
    ...
} else {
    ...
}
while ($conditionB) {
    ...
}
for ($i = 0; $i < 5, $i++) {
    ...
}
foreach ($items as $item) {
    ...
}

... peut aussi s'écrire :

if ($conditionA) :
    ...
else :
    ...
endif;
while ($conditionB) :
    ...
endwhile;
for ($i = 0; $i < 5, $i++) :
    ...
endfor;
foreach ($items as $item) :
    ...
endforeach;

Mots clés pour les classes

Pour faire référence à un membre "normal" de la classe, on appelle $this->myVar. Noter l'absence du $ devant myVar, alors même que la variable s'appelle effectivement $myVar.

Pour faire référence à un membre statique, on appelle self::$myVar. Noter que cette fois, le $ est explicite. Bonjour la cohérence !

Pour faire référence à la classe mère, on appelle, par exemple, parent::__construct().

Fonctions variabilisées

Si, si, c'est possible.

function getAuteur() {
    echo 'Victor Hugo'; 
}

$fonction1 = 'getAuteur';   // Noter l'absence de parenthèses.

$fonction1()                // getAuteur() est exécutée.

Initialisation de variables par HereDoc

$sql = <<<EOT
select *
  from $tablename
 where id in [$order_ids_list]
   and product_name = "widgets"
EOT;

C'est une manière d'affecter une chaîne longue -- tout ce qui est compris entre les deux occurrences de EOT -- à une variable.

Avantages :

  • Plus besoin d'échapper quoi que ce soit, ni les apostrophes, ni les guillemets.

  • Les variables sont interpolées, comme lorsqu'on emploie les guillemets.

A noter que l'identifiant signalant le début et la fin de la chaîne peut être n'importe quoi : EOT, SQL, voire TOTO si ça vous chante... Souvent utilisé, EOT signifie end of text. Attention : pour les versions de PHP inférieures à 7.3, l'identifiant doit se trouver en tout début de ligne. Il ne peut donc pas être indenté.

Si vous fournissez une chaîne de caractères "statique", sans variables à interpoler, vous pouvez utiliser un cousin du HereDoc, le NowDoc. La syntaxe est exactement la même, à l'exception des apostrophes entourant l'identifiant initial. (Notez qu'ils restent absents de l'identifiant final.)

$sql = <<<'EOT' // Apostrophes !
select *
  from mes_voitures
 where brand = 'LINCOLN'
EOT;            // Pas d'apostrophes !

Article suivant Article précédent