Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

A - Venir de Python, JavaScript ou Java

Une ligne par construction, l’écriture que vous connaissez Ă  gauche, l’écriture PHP moderne Ă  droite. Quand PHP propose une ancienne forme et une nouvelle, seule la nouvelle figure ici.

ConceptPythonJavaScriptJavaPHP
Variablex = 1let x = 1int x = 1;$x = 1;
ConstanteX = 1 (convention)const X = 1static final int X = 1;const X = 1;
Interpolation de chaĂźnef"hi {name}"`hi ${name}`"hi " + name"hi {$name}"
Concaténationa + ba + ba + b$a . $b
ChaĂźne multiligne"""..."""`...`"""..."""<<<TXT ... TXT;
Division entiĂšrea // bMath.trunc(a / b)a / bintdiv($a, $b)
Puissancea ** ba ** bMath.pow(a, b)$a ** $b
ÉgalitĂ© strictea == ba === ba.equals(b)$a === $b
Coalescence de nulla if a is not None else ba ?? bOptional.ofNullable(a).orElse(b)$a ?? $b
Ternairea if c else bc ? a : bc ? a : b$c ? $a : $b
Littéral de liste[1, 2][1, 2]List.of(1, 2)[1, 2]
Littéral de dictionnaire{"k": 1}{k: 1}Map.of("k", 1)['k' => 1]
Ajout en fin de listexs.append(v)xs.push(v)xs.add(v)$xs[] = $v;
Lecture avec valeur par défautd.get("k", 0)d.k ?? 0d.getOrDefault("k", 0)$d['k'] ?? 0
Longueurlen(xs)xs.lengthxs.size()count($xs)
Longueur d’une chaünelen(s)s.lengths.length()mb_strlen($s)
Tranchexs[1:3]xs.slice(1, 3)xs.subList(1, 3)array_slice($xs, 1, 2)
Parcourir une listefor v in xs:for (const v of xs)for (var v : xs)foreach ($xs as $v)
Parcourir un dictionnairefor k, v in d.items():for (const [k, v] of Object.entries(d))for (var e : d.entrySet())foreach ($d as $k => $v)
Map[f(v) for v in xs]xs.map(f)xs.stream().map(f)array_map($f, $xs)
Filtre[v for v in xs if p(v)]xs.filter(p)xs.stream().filter(p)array_filter($xs, $p)
Lambdalambda x: x * 2x => x * 2x -> x * 2fn($x) => $x * 2
Capture des closurespar référencepar référenceeffectivement finalepar valeur (use ($x) ou fn)
Argument par défautdef f(x=1):function f(x = 1)surchargefunction f(int $x = 1)
Argument nomméf(x=1)f({x: 1})aucunf(x: 1)
Variadiquedef f(*xs):function f(...xs)void f(int... xs)function f(int ...$xs)
Classeclass A:class A {}class A {}class A {}
Constructeurdef __init__(self, x):constructor(x) {}A(int x) {}public function __construct(public int $x) {}
Membre d’instanceself.xthis.xthis.x$this->x
Membre statiqueA.xA.xA.xA::$x
InterfaceProtocolaucune (TS : interface)interface A {}interface A {}
ÉnumĂ©rationclass C(Enum):aucune (TS : enum)enum C { A, B }enum C { case A; case B; }
Rattraper une exceptionexcept E as e:catch (e)catch (E e)catch (E $e)
Navigation sûreaucunea?.bOptional.map$a?->b
ChaĂźne vers entierint(s)parseInt(s)Integer.parseInt(s)(int) $s
Test de typeisinstance(x, A)x instanceof Ax instanceof A$x instanceof A
Afficherprint(x)console.log(x)System.out.println(x)echo $x;
Importfrom a import Bimport { B } from 'a'import a.B;use A\B;
Gestionnaire de paquetspip, pyproject.tomlnpm, package.jsonMaven, pom.xmlComposer, composer.json
Lanceur de testspytestJest, VitestJUnitPHPUnit, Pest
Formateurblack, ruffPrettiergoogle-java-formatPHP-CS-Fixer, PHP_CodeSniffer
Analyse statiquemypy, pyrighttscle compilateurPHPStan, Psalm
Exécuter un scriptpython a.pynode a.jsjava A.javaphp a.php
REPLpythonnodejshellphp -a

Les diffĂ©rences qui ne sont pas qu’une question d’écriture

  • Une requĂȘte part de rien et finit sans rien, parce qu’aucun processus ne reste en vie entre deux requĂȘtes. Voir Comment PHP s’exĂ©cute.
  • Les tableaux sont des valeurs : affecter ou passer un tableau en produit une copie, alors que les objets circulent par identifiant. Voir Les tableaux.
  • Les closures capturent par valeur, au moment de leur crĂ©ation, et une modification ultĂ©rieure de la variable extĂ©rieure ne leur parvient pas. Voir Fonctions et closures.
  • Le typage strict est un interrupteur par fichier : declare(strict_types=1) rĂ©git les appels faits depuis ce fichier, et seulement lui. Voir Le systĂšme de types.