Comparatif : de PHP à JavaScript

Ce guide présente une comparaison de la syntaxe entre PHP (5.6 minimum) et JavaScript (ES6/ES2015 minimum).

Vous trouverez d’autres guides et une explication plus générale ici.

Déclarations des données

En JavaScript, les variables doivent être déclarées. Depuis l’ES6, utilisez seulement l’instruction let.

L’ES6 a introduit les constantes en JavaScript. Des valeurs complexes peuvent être utilisées et donc manipulées.

Types de données simples

En plus de null, JavaScript contient le type undefined, et NaN (Not a Number). Ce sont des erreurs, ne les utilisez donc pas.

Détails sur les chaînes de caractères

En JavaScript, les sauts de ligne ne sont pas autorisés avec les guillemets simples ou doubles.

L’ES6 a introduit les template literals : de nouveaux guillemets, les backticks, pour l’interpolation des variables et dans lesquels les sauts de ligne sont autorisés (les mêmes qu’on utilise en PHP dans les requêtes SQL). Soyez vigilants avec la position des accolades et leur rôle : en PHP, elles permettent d’isoler les variables pour éviter les confusions, en JavaScript, elles permettent d’insérer une expression.

C’est aussi pratique pour gérer les guillemets simples et doubles dans une même chaîne.

En JavaScript, privilégiez les backticks plutôt que la concaténation, qui porte à confusion avec les additions et peut conduire à des erreurs.

Listes de données

En JavaScript, les tableaux sont seulement des listes indexées numériquement. Ils sont passés par référence.

L’équivalent des tableaux associatifs en PHP sont appelés des objets en JavaScript.

Blocs

En JavaScript, l’espace est obligatoire dans l’instruction else if.

Comme en PHP, faites attention aux valeurs équivalentes à false.

En JavaScript, l’instruction switch fait des comparaisons strictes.

Depuis l’ES6, grâce à let, la portée des variables se limite au bloc en cours.

Les itérations sont simplifiées depuis l’ES6.

Une autre possibilité pour les itérations complexes (avec les valeurs et les index, seulement pour les tableaux).

Fonctions

En JavaScript, vous pouvez accéder aux portées parentes directement.

En JavaScript, les paramètres sont toujours facultatifs. L’ES6 a introduit la possibilité de préciser des valeurs par défaut.

Vous devez vérifier manuellement les paramètres obligatoires. Une comparaison non stricte avec null est essentielle, étant donné que la valeur peut aussi être undefined.

Vous pouvez aussi avoir un nombre indéfini de paramètres.

Arrow functions

L’ES6 a introduit une syntaxe raccourcie pour les fonctions anonymes, appelée arrow functions. Utilisez-la systématiquement, car elle règle aussi un problème de contexte spécifique à JavaScript.

Fonctions natives

Toutes les fonctions sont des méthodes en JavaScript, et sont donc appelées depuis un objet.

Quand une fonction semble être appelée directement, comme parseInt(), c’est parce que l’objet global est implicite : window.parseInt()Utilisez le raccourci, étant donné que window n’est pas toujours l’objet global.

Classes

L’ES6 a introduit la syntaxe des classes, pour simplifier la programmation orienté objet en JavaScript. Les propriétés sont déclarées directement dans le constructeur. Les propriétés pré-déclarées apparaîtront dans une prochaine version de JavaScript.

Lors d’un héritage en JavaScript, l’appel au constructeur parent est obligatoire dans le constructeur fils.

Les getters et setters ont une syntaxe spéciale en JavaScript (mais vous pouvez aussi faire des accesseurs classiques). Ne pré-déclarez pas la propriété, JavaScript le fait automatiquement.

Contrairement à PHP, JavaScript n’a pas une syntaxe distincte pour l’accès aux méthodes statiques.

Pour l’instant, il n’y a pas de modificateurs de visibilité, ni d’interfaces et de classes abstraites en ES7. ils apparaîtront sans doute dans une prochaine version de JavaScript, mais TypeScript permet de les utiliser dès maintenant (voir notre guide de PHP 7 à TypeScript).

Namespaces

L’encapsulation est gérée directement par le système de chargement depuis l’ES6 : s’il y a l’instruction export ou l’instruction import, alors vous n’êtes plus en portée globale.

Poursuivre avec le guide de PHP 7 à TypeScript