function.()).{}).<?php
function hello() {
echo "Hello, world!<br>";
}
// Équivalent en Java
public class Main {
public static void hello() {
System.out.println("Hello, world!");
}
}
()).<?php
function hello() {
echo "Hello, world!<br>";
}
hello(); // Affiche "Hello, world!"
hello(); // Affiche "Hello, world!"
hello(); // Affiche "Hello, world!"
// Équivalent en Java
public class Main {
public static void hello() {
System.out.println("Hello, world!");
}
public static void main(String[] args) {
hello(); // Affiche "Hello, world!"
hello(); // Affiche "Hello, world!"
hello(); // Affiche "Hello, world!"
}
}
,).<?php
function hello($name) {
echo "Hello, $name!<br>";
}
hello("Alice"); // Affiche "Hello, Alice!"
hello("Bob"); // Affiche "Hello, Bob!"
public class Main {
public static void hello(String name) {
System.out.println("Hello, " + name + "!");
}
public static void main(String[] args) {
hello("Alice"); // Affiche "Hello, Alice!"
hello("Bob"); // Affiche "Hello, Bob!"
}
}
return.<?php
function square($x) {
return $x * $x;
}
$result = square(3);
echo $result; // Affiche 9
// Équivalent en Java
public class Main {
public static int square(int x) {
return x * x;
}
public static void main(String[] args) {
int result = square(3);
System.out.println(result); // Affiche 9
}
}
<?php
function hello($name = "world") {
echo "Hello, $name!<br>";
}
hello(); // Affiche "Hello, world!"
hello("Alice"); // Affiche "Hello, Alice!"
// Équivalent en Java
// Il n'est pas possible de définir des paramètres optionnels en Java.
// Ceci est spécifique à PHP.
,).<?php
function add($x, $y) {
return $x + $y;
}
$result = add(3, 5);
echo $result; // Affiche 8
// Équivalent en Java
public class Main {
public static int add(int x, int y) {
return x + y;
}
public static void main(String[] args) {
int result = add(3, 5);
System.out.println(result); // Affiche 8
}
}
<?php
function add(float $x, float $y): float {
return $x + $y;
}
<?php
$result = add(3, "Hello");
// Uncaught TypeError: add():
// Argument #2 ($y) must be of type float, string
Il est possible de passer plusieurs types de données en utilisant des types union :
<?php
function add(int|float $x, int|float $y): float {
return $x + $y;
}
Types de base : int, float, string, bool, array, mixed, null et
void.
<?php
function add(int $x, ?int $y): int {
if ($y === null) {
return $x;
}
return $x + $y;
}
add(3, null); // Retourne 3
add(3, 5); // Retourne 8
La syntaxe ?int est une abréviation pour int|null.
<?php
function find(array $numbers, int $id): ?int { // ou : int|null
foreach ($numbers as $number) {
if ($number === $id) {
return $id;
}
}
return null;
}
$numbers = [1, 2, 3];
find($numbers, 2); // Retourne 2
find($numbers, 4); // Retourne null car 4 n'est pas dans le tableau $numbers
find([2, 4, 6], 4); // Retourne 4
find([2, 4, 6], 5); // Retourne null car 5 n'est pas dans le tableau [2, 4, 6]
De cette manière, la fonction find peut retourner soit un int (l'identifiant
trouvé), soit null (si l'identifiant n'est pas trouvé dans le tableau).
Si une fonction est censée ne rien retourner, il est recommandé de typer la
valeur de retour avec void.
<?php
function square($x) {
return $x * $x;
}
echo $x; // Erreur : variable $x non définie
Il n'est pas possible d'accéder à la variable $x en dehors de la fonction
square, car elle a une portée locale à cette fonction.
// Équivalent en Java
public class Main {
public static int square(int x) {
return x * x;
}
public static void main(String[] args) {
System.out.println(x); // Erreur : variable x non définie
}
}
global.<?php
$x = 42;
function square() {
global $x;
$x = $x * $x;
}
square();
echo $x; // Affiche 1764
// Équivalent en Java
public class Main {
public static int x = 42;
public static int square() {
x = x * x;
}
public static void main(String[] args) {
square();
System.out.println(x); // Affiche 1764
}
}
En programmation, les paramètres d'une fonction peuvent être de deux manières différentes :
Passage par valeur
Une copie de la variable est créée et utilisée dans la fonction.
Les modifications apportées à la variable dans la fonction n'affectent pas la variable d'origine.
Il s'agit du comportement par défaut en PHP mais il est aussi possible de passer des paramètres par référence.
Passage par référence
Une référence à la variable d'origine est utilisée dans la fonction.
Les modifications apportées à la variable dans la fonction affectent la variable d'origine.
En Java, les types primitifs (int, float, etc.) sont passés par valeur, tandis que les objets sont passés par référence.
Peu utilisé, mais très pratique dans certains cas, par ex. les boucles.
Une copie de la variable est créée et utilisée dans la fonction.
<?php
function increment($x) {
$x++;
}
$value = 5;
increment($value);
echo $value; // Affiche 5, car $value n'est pas modifié par la fonction increment
Une référence à la variable d'origine est utilisée dans la fonction.
<?php
function increment(&$x) {
$x++;
}
$value = 5;
increment($value);
echo $value; // Affiche 6, car $value est modifié par la fonction increment
<?php
$length = strlen("Hello, world!");
echo $length; // Affiche 13
// Équivalent en Java
public class Main {
public static void main(String[] args) {
String s = "Hello, world!";
int length = s.length();
System.out.println(length); // Affiche 13
}
}
abs, sqrt, pow, min, max, etc.<?php
$result = sqrt(16);
echo $result; // Affiche 4
// Équivalent en Java
public class Main {
public static void main(String[] args) {
double result = Math.sqrt(16);
System.out.println(result); // Affiche 4.0
}
}
strlen, substr, str_replace, strtolower, strtoupper,
etc.$result = strtoupper("hello, world!");
echo $result; // Affiche "HELLO, WORLD!"
// Équivalent en Java
public class Main {
public static void main(String[] args) {
String result = "hello, world!".toUpperCase();
System.out.println(result); // Affiche "HELLO, WORLD!"
}
}
isset, empty, unset, is_array, is_string, etc.<?php
$var = 42;
if (isset($var)) {
echo "The variable is defined.";
} else {
echo "The variable is not defined.";
}
echo "<br>"; // Retour à la ligne HTML
if (isset($undefined)) {
echo "The variable is defined.";
} else {
echo "The variable is not defined.";
}
// Équivalent en Java
public class Main {
public static void main(String[] args) {
int var = 42;
if (var != null) {
System.out.println("The variable is defined.");
} else {
System.out.println("The variable is not defined.");
}
System.out.println(); // Retour à la ligne
int undefined;
if (undefined != null) {
System.out.println("The variable is defined.");
} else {
System.out.println("The variable is not defined.");
}
}
}
require_once.<?php
// Fichier `functions.php`
function hello(string $name): string {
return "Hello, $name!<br>";
}
<?php
// Fichier `index.php`
require_once __DIR__ . "/functions.php"; // On inclut le fichier
// La fonction `hello` est définie dans le fichier importé
// et peut être utilisée ici
echo hello("Alice");
include_once et require_onceIl est possible d'importer des fichiers avec include_once et require_once :
include_once : si le fichier n'est pas trouvé, un avertissement est émis.require_once : si le fichier n'est pas trouvé, une erreur fatale est émise.Nous conseillons de toujours utiliser require_once.
require_once et requireIl est également possible d'importer des fichiers avec include et require au
lieu de *_once mais des problèmes peuvent survenir :
require_once : le fichier est inclus une seule fois, même si la directive
est utilisée plusieurs fois.require : le fichier est inclus à chaque fois que la directive est
utilisée - cela peut entraîner des erreurs.Il est recommandé d'utiliser require_once pour éviter les problèmes liés à
l'inclusion multiple du même fichier.
Est-ce que vous avez des questions ?
N'allez pas trop vite, vous avez le temps ! N'hésitez pas à vous entraidez si vous avez des difficultés.
URLs
Illustrations