IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

PHP ne craint plus, examinons les changements de langage intervenus depuis la sortie de PHP 5.4
Par Víctor Falcón Ruíz

Le , par Víctor Falcón Ruíz

113PARTAGES

10  2 
Je suis fatigué de lire toujours le même message : « PHP, c'est nul ». Mais la plupart de ces critiques n'ont pas regardé PHP depuis 2012, et beaucoup de choses ont changé depuis.


Jetons un coup d'œil aux changements de langage qui ont eu lieu depuis la sortie de PHP 5.4.

Traits (PHP 5.4)

PHP 5.4 a introduit les traits, qui permettent la composition plutôt que l'héritage. Vous pouvez avoir des traits et les inclure dans chaque classe.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
 
trait SayWorld {
    public function sayHello() {
        echo 'World!';
    }
}
 
class MyHelloWorld {
    use SayWorld;
}

Syntaxe de tableau courte

L'époque où l'on écrivait array() comme un homme des cavernes est révolue. Vous pouvez désormais utiliser les crochets pour une syntaxe de tableau courte.

Code : Sélectionner tout
1
2
3
4
5
6
 
$newArray = [
  'first',
  'second',
  'third'
];

Destructuration de tableau

L'affectation d'un tableau à une variable temporaire appartient au passé. Vous pouvez désormais utiliser la déstructuration de tableau pour affecter directement des variables à partir d'un tableau.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
 
$newArray = [
  'first',
  'second',
  'third'
];
 
$anotherArray = [
  ...$newArray,
  'fourd',
  'fifth'
];

Fonctions variadiques de première classe

Vous pouvez passer autant d'arguments que vous le souhaitez à une fonction en utilisant la syntaxe ....

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
 
class Variadic {
  public function query($query, ...$attributes) {
    var_dump($query, $attributes);
  }
}
 
$v = new Variadic();
 
$v->query('select * from users', 1, 'Víctor');
 
// result 'select * from users', 1, 'Víctor'

Générateurs

Vous avez besoin de faire quelque chose qui demande beaucoup de mémoire de manière efficace ? Les générateurs sont la solution. Vous trouverez ici plus d'informations sur les générateurs.

Classes anonymes

Vous avez besoin d'une nouvelle classe, mais vous n'avez pas le temps de créer un nouveau fichier ? Les classes anonymes sont la solution. Elles peuvent implémenter une interface comme n'importe quelle autre classe.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
 
$anonymousClass = new class{
  public $property = 1;
 
  public function add(int $x): int
  {
    return $this->property + $x;
  }
}
 
echo $anonymousClass->propert; // 1
echo $anonymousClass->add(2);  // 3

Virgules flottantes (PHP 7)

Plus besoin de se préoccuper de l'ajout d'une virgule finale à un appel de fonction ou de méthode.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
 
class TrailingComma {
  public function action(
    int $x,
    int $y, // <- This comma causes an error before
  ) {
    echo $x + $y;
  }
}

Fonctions fléchées

PHP dispose également de fonctions fléchées. Elles ne sont pas exactement comme celles de JavaScript, mais elles sont un excellent ajout au langage.

Code : Sélectionner tout
1
2
3
4
5
6
 
$y = 1;
 
$fn1 = fn($x) => $x + $y;
 
$x = $fn1(2); // 3

Opérateur de coalescence Null (PHP 7)

Plus besoin de vérifier la présence de null avant d'assigner une valeur. L'opérateur null coalescent vous couvre.

Code : Sélectionner tout
1
2
3
 
// If user is null or undefined, 'nobody' is assigned
$username = $_GET['user'] ?? 'nobody';

Assignation avec l'opérateur de coalescence Null (PHP 7.4)

Et si vous avez besoin de raccourcir l'opérateur de coalescence null, il y a un opérateur d'assignation pour cela aussi.

Code : Sélectionner tout
1
2
3
 
// Value of $_GET['user'] change if is undefined or null
$_GET['user'] ??= 'nobody';

Opérateur de chaînage Null (PHP 8)

Plus besoin de vérifier la présence de null avant d'appeler une méthode. L'opérateur de chaînage null est là pour sauver la situation.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
 
class Customer {
    public function getAddress(): ?Address {}
}
 
class Address {
    public function getCountry(): string {}
}
 
// Null if no Address
$country = $customer->getAddress()?->getCountry();

Arguments nommés (PHP 8)

Vous en avez marre d'utiliser null pour ignorer les arguments optionnels ? Les arguments nommés sont la solution.

Imaginez que vous avez une fonction avec beaucoup d'arguments, dont certains sont nullables.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
 
function takes_many_args(
    $first_arg,
    $second_arg = 'any',
    $third_arg = 5,
)
{
    // ...
}

Avant vous devez envoyer le $second_arg par défaut, même si vous ne le changez pas.

Code : Sélectionner tout
1
2
 
takes_many_args('first', 'any', 3);

Maintenant, vous pouvez simplement faire quelque chose comme ceci :

Code : Sélectionner tout
1
2
 
takes_many_args('first', third_arg: 3);

Instruction match (PHP 8)

Fini les instructions switch qui font des kilomètres de long. L'instruction match est une façon plus compacte et plus lisible d'écrire les instructions switch.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
 
$food = 'cake';
 
$return_value = match ($food) {
  'apple' => 'This food is an apple',
  'bar' => 'This food is a bar',
  'cake' => 'This food is a cake',
  default => 'Unknown food',
};
 
var_dump($return_value); // 'This food is a cake'

Enums (PHP 8.1)

Les enums sont enfin là ! Vous pouvez créer des classes enum avec des valeurs et des méthodes, et même les utiliser comme indices de type.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
enum Suit
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;
}
 
function do_stuff(Suit $s)
{
    // ...
}
 
do_stuff(Suit::Spades);

Sûreté des types

PHP a maintenant des arguments typés, des types de retour, des types d'union, des types d'intersection, et plus encore. Vous pouvez même utiliser des indices de type pour les enums !

Nous pouvons maintenant ajouter des types aux arguments, aux valeurs de retour, aux propriétés des classes, aux constantes, et à presque tout.


Promotion des propriétés du constructeur (PHP 8.0)

Le temps des constructeurs verbeux est révolu. La promotion des propriétés du constructeur est là pour réduire le code de la chaudière.

C'est l'un des meilleurs ajouts à PHP, maintenant les classes sont super simples et nous n'avons pas besoin d'écrire les propriétés de classe plus d'une fois.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
 
class Customer
{
    public function __construct(
        public string $name, 
        public string $email, 
    ) {}
}

Propriétés ReadOnly (PHP 8.1)

Maintenant, nous n'avons plus besoin de créer des getters et setters personnalisés et de définir une visibilité privée pour chaque méthode.

Avec le flag readonly, nous pouvons protéger nos propriétés des modifications en dehors de la classe elle-même.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
 
class Customer
{
    public function __construct(
        readonly public string $name, 
        readonly public string $email, 
    ) {}
}

En PHP 8.3, les classes anonymes readonly (en lecture seule) ont été ajoutées.

Code : Sélectionner tout
1
2
3
4
5
6
 
$class = new readonly class {
    public function __construct(
        public string $name = 'Víctor',
    ) {}
};

Performance

Les performances de PHP ont augmenté de 400 % entre la version 5.6 et la version 7, et de 20 % entre la version 7 et la version 8.

Il est suffisamment rapide pour la plupart des cas d'utilisation, et si vous avez besoin d'un cas d'utilisation spécialisé, utilisez un langage spécialisé.

Conclusion

En conclusion, PHP n'est pas mort, et il n'est plus nul. Le langage a subi des changements significatifs depuis 2012, et il est grand temps de réviser nos opinions à son sujet.

Avec l'introduction des traits, de la syntaxe de tableau courte, de la déstructuration de tableau, et d'une foule d'autres fonctionnalités, PHP est devenu un langage plus efficace, plus lisible, et plus facile à maintenir.

Ajoutez à cela les améliorations dans la gestion des erreurs, l'introduction des attributs et l'arrivée tant attendue des enums, et il est clair que PHP est devenu un choix robuste et fiable pour le développement web.

Ainsi, la prochaine fois que quelqu'un vous dira que PHP est nul, vous pourrez lui répondre en toute confiance qu'il est resté dans le passé.

Source : "PHP Doesn't Suck Anymore" (par Víctor Falcón Ruíz)

Et vous ?

Quel est votre avis sur le sujet ?
Partagez-vous l'avis selon lequel PHP serait nul ? Selon vous, pourquoi le langage souffre-t-il d'une telle réputation auprès de certains utilisateurs ?

Voir aussi :

PHP 8.2 est disponible et s'accompagne des propriétés "en lecture seule" aux classes, ainsi que la possibilité de déprécier les propriétés dynamiques

PHP 8.3, mise à jour majeure du langage PHP, est disponible, parmi les nouvelles fonctionnalités : le typage explicite des constantes de classe, le clonage profond des propriétés en lecture seule

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de cavo789
Membre expert https://www.developpez.com
Le 26/07/2024 à 17:21
Hello

On peut typer les variables et on peut définir strict_types sur 1 pour interdire les variables pouvant être définies de plusieurs types possibles.

Oui php 4 et 5 étaient médiocre, oui php 7 a apporté une réelle amélioration poursuivie avec php 8.

Alors oui, pour des questions de compatibilité, des vieux codes écrit par des néophytes continuent à pouvoir être exécutés (si on se moque des alertes) mais il ne serait pas correct de dire que le langage n'a pas évolué.

Oui, cela demande de la rigueur et oui il est bon d'utiliser plusieurs outils d'analyse de code comme phan, phpmd, phpcs et d'autres (donc oui on peut faire du portnawak) mais toujours oui, on peut faire de très propre.

Php est accessible à des débutants, c'est une cause de bien des maux. Mais c'est aussi une force dont ne peut qu'être jaloux de langages plus restrictifs comme C++ pour n'en citer qu'un.
5  0 
Avatar de cavo789
Membre expert https://www.developpez.com
Le 27/07/2024 à 16:50
Citation Envoyé par stailer Voir le message
Merci pour les pouces vers le bas
Aucun de ma part, c'est dommage que ce soit anonyme d'ailleurs. Pour le reste, tout avis et interventions constructives et respectueuses est une excellente chose.
3  0 
Avatar de air-dex
Membre expert https://www.developpez.com
Le 30/07/2024 à 1:21
PHP s'est en effet clairement amélioré, surtout depuis PHP 5. Ceux qui veulent le débiner s'efforceront de faire perdurer l'image de PHP 4.

PHP traîne également quelques autres boulets quant à sa réputation. Le principal vient des CMS et de leurs paramétrages WYSIWYG pour noobs, le roi d'entre eux étant WordPress. Idéal quand PHP 4 ne suffit pas.

Citation Envoyé par chrtophe Voir le message
Pour ce que j'en sais, les principaux autres langages utilisés pour faire du web sont le Go, Python
Côté Web voici une liste plus ou moins exhaustive des concurrents de PHP pour du backend Web :
  • Java (Jakarta EE, Spring).
  • JavaScript (Node.js, Express.js).
  • Python (Django).
  • Ruby (Ruby on Rails).
  • Perl


Après PHP ne s'utilise pas forcément pur, mais souvent avec des frameworks comme Symfony ou Laravel.

PHP c'est aussi les CMS, à commencer par WordPress.

Enfin rien n'empêche de s'en servir comme d'un bête langage de script sans fonctionnalités Web, à l'instar de Python ou de Node.js.
3  0 
Avatar de berceker united
Expert éminent https://www.developpez.com
Le 08/10/2024 à 12:04
Je ne comprend pas tout ce débat autour du type & cie. Si on arrive à devoir faire quelque chose de très restrictif avec un typage fort dans tous les sens, c'est que les développeurs font de la m*****. C'est surtout pour compenser le problème se trouvant derrière le clavier.
2  0 
Avatar de pascalbaudry
Membre du Club https://www.developpez.com
Le 04/06/2024 à 15:37
Bonjour,

Et merci pour ce comparatif.

Quel est le taux de compétence de PHP pour la création d'un site aujourd'hui ?
Quel sont ses langages concurrents, quel est leur taux de compétence, et couvrent-ils l'entièreté des fonctionnalités de PHP ? (ex : comparatif entre un bon diesel et un véhicule électrique ).

Je suis par avance désolé si mes questions sont hors de propos.

Je suis débutant sur PHP, que je trouve intéressant par les fonctionnalités qu'il autorise mais aussi inquiet de savoir qu'il est identifié comme obsolète ou archaïque aujourd'hui.

Merci pour vos réponses.
1  0 
Avatar de pascalbaudry
Membre du Club https://www.developpez.com
Le 06/06/2024 à 10:46
Merci pour la réponse.
Je ne connaissais pas Go. Je viens de découvrir qu'il y avait Ruby on Rails également.
1  0 
Avatar de pascalbaudry
Membre du Club https://www.developpez.com
Le 24/07/2024 à 15:46
Merci pour cette précision.
En ce qui me concerne, mon niveau étant très bas, le Flight Level des objets cités n'est pas dans mon objectif.
J'espère me mettre sérieusement à PHP, tenter de maîtriser la conception d'un site avec liaison à une base de donnée MySql. Ensuite, verra qui pourra.
1  0 
Avatar de stailer
Membre chevronné https://www.developpez.com
Le 26/07/2024 à 9:49
"Nous pouvons maintenant ajouter des types aux arguments, aux valeurs de retour, aux propriétés des classes, aux constantes, et à presque tout."

Aller, encore une petite couche pour me faire plaisir

"presque tout" .... ou "presque rien" ? Est-ce que je peux typer une variable ? Et ben non.... Toujours pas.

Je peux toujours pas faire :

Code : Sélectionner tout
1
2
3
4
5
6
7
public function methodSample() : void{
   
    int $x = 4; 
    $x = 'cool'; 

}
au pire on pourrait faire le code suivant comme en c# :

Code : Sélectionner tout
1
2
3
4
5
6
7
public function methodSample() : void{
   
    var $x = 4; 
    $x = 'cool'; 

}
Mais non, on peut pas.

T'as une variable qui peut commencer par être un int, devenir une chaine et finir par être un objet en fin de méthode. Si tu tombes sur un projet avec un dév pas bon et qui a connut que PHP, le gars il a fait ça partout c'est une certitude.
3  2 
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 26/07/2024 à 17:05
Tu peux typer des variables mais ce n'est pas par défaut et je ne connais pas les éventuelles limites, je suis pas spécialiste PHP.
1  0 
Avatar de pascalbaudry
Membre du Club https://www.developpez.com
Le 05/08/2024 à 8:44
"Savoir utiliser ces sites ce n'est pas savoir développer des sites."
Je n'ai aucun doute là-dessus.
1  0