Maison > développement back-end > tutoriel php > PHP Master | Programmation fonctionnelle en php

PHP Master | Programmation fonctionnelle en php

Joseph Gordon-Levitt
Libérer: 2025-02-24 09:54:17
original
369 Les gens l'ont consulté

PHP Master | Functional Programming in PHP

De nombreux programmeurs aiment parler de programmation fonctionnelle, mais si vous leur demandez s'ils l'ont réellement utilisé, la plupart des réponses seront "non". La raison est simple: lorsque nous avons des débutants en programmation, on nous apprend à penser de manière impérative, à savoir les organigrammes et les étapes du programme. Par conséquent, cet article expliquera certains concepts importants de programmation fonctionnelle et comment écrire du code fonctionnel dans PHP.

Points clés

  • La programmation fonctionnelle traite les calculs comme une évaluation des fonctions mathématiques et évite les données étatiques et mutables, traitant les fonctions comme des citoyens de première classe. Cela signifie que les fonctions peuvent être utilisées comme des valeurs dans la programmation impérative.
  • Les concepts clés de la programmation fonctionnelle incluent l'invariance (une fois définie, la valeur d'une variable ne peut pas être modifiée), la récursivité (utilisée fréquemment en raison de l'invariance), les fonctions pures (fonctions sans effets secondaires) et les fonctions d'ordre supérieur (fonctions qui peut être utilisé pour convertir les fonctions en fonction d'ordre supérieur).
  • La programmation fonctionnelle permet un code plus simple et plus lisible pour encourager la programmation sûre en évitant les données d'état et de variables. Il peut également vous aider à vous concentrer sur ce que vous souhaitez réaliser, plutôt que sur les événements accidentels dans le processus de gestion.
  • Malgré les avantages de la programmation fonctionnelle, sa courbe d'apprentissage est très raide pour ceux qui ont été formés impérativement. Certains des avantages associés à la programmation fonctionnelle ne s'appliquent traditionnellement pas à PHP car il n'est pas conçu comme un langage de programmation fonctionnelle. Ce n'est peut-être pas non plus le moyen le plus efficace d'écrire des programmes.

Concepts importants de la programmation fonctionnelle

Wikipedia définit la programmation fonctionnelle comme "un paradigme de programmation qui traite les calculs comme une évaluation des fonctions mathématiques et évite les données d'état et variables". Dans la programmation fonctionnelle, les fonctions sont considérées comme des citoyens de première classe, tandis que dans la programmation impérative, nous nous concentrons principalement sur les données et les étapes pour modifier les données pour obtenir les résultats attendus. Lorsque nous disons qu'une fonction est un citoyen de première classe, cela signifie que nous pouvons utiliser des fonctions comme nous utilisons des valeurs dans la programmation impérative. Ils peuvent être transmis sous forme de paramètres à une fonction, définis dans une autre fonction, ou même retournés en conséquence. En d'autres termes, "une fonction est une valeur". Nous en discuterons à nouveau plus tard, mais la programmation fonctionnelle a de nombreux autres concepts importants. Pour ne nommer que quelques exemples:

Invariance

L'invariance fait référence au comportement qu'une fois la valeur d'une variable définie, elle ne peut pas être modifiée. Différentes langues ont des implémentations différentes;

Recursion

La récursivité est également importante dans la programmation fonctionnelle. Dans la programmation impérative, lorsque nous devons manipuler des ensembles ou des tableaux, nous pouvons utiliser des structures de boucle telles que pour et pour itérer à travers chaque élément et utiliser des variables temporaires pour enregistrer la valeur actuelle. Cependant, cette approche n'est pas possible dans la programmation fonctionnelle due à l'invariance. La récursivité est la réponse, car cette comptabilité se fait implicitement via la pile d'appels. Supposons que nous voulons écrire une fonction pour trouver la somme de tous les éléments dans un tableau (oubliez l'existence de Array_sum () pour l'instant). Dans le style fonctionnel, nous écrire:

<?php
function sum($array) {
    if (empty($array))
        return 0;
    else
        return $array[0] + sum(array_slice($array, 1));
}

$total = sum(array(1, 2, 3)); // 6
?>
Copier après la connexion
Copier après la connexion
Copier après la connexion

La liste vide reviendra 0, ce qui est notre état de base. Pour un tableau contenant plusieurs valeurs, il renvoie le résultat de l'ajout du premier élément à la somme récursive de tous les autres éléments.

Fonctions pures et transparence de référence

Si une fonction ne modifie pas la valeur de son propre objet externe (comme les variables globales ou statiques) et n'a pas d'effets d'E / S (comme l'écriture dans les fichiers, les bases de données, etc.), la fonction est dite pour n'avoir aucun effet secondaire. De telles fonctions sont également appelées fonctions pures. Pour un ensemble de paramètres donné, la sortie de la fonction pure sera toujours la même, ce qui se traduit par une autre propriété appelée transparence de référence. Lorsqu'une fonction est référencée transparente, nous pouvons remplacer la fonction par sa valeur sans affecter le comportement du programme. Toutes les fonctions mathématiques sont des fonctions pures, tandis que les fonctions de date, rand (), etc. sont des fonctions non-pure.

Fonctions d'ordre avancé

Les concepts ci-dessus peuvent être mis en œuvre dans presque tous les langages de programmation, mais les fonctions citoyennes de première classe et les fonctions d'ordre supérieur sont les deux caractéristiques les plus importantes de la programmation fonctionnelle. J'ai expliqué qu'une fonction citoyenne de première classe signifie qu'une fonction peut être traitée comme une valeur. Une fonction d'ordre supérieur est une fonction qui peut prendre une fonction en tant que paramètre et peut renvoyer une fonction en conséquence. Deux fonctionnalités importantes récemment ajoutées nous permettent d'écrire des fonctions d'ordre supérieur dans PHP: les expressions et fermetures de lambda.

Fonction lambda

La fonction lambda (également connue sous le nom de fonction anonyme) n'est qu'une fonction sans nom. Lorsque nous définissons une fonction anonyme, une référence à la fonction est renvoyée, qui est stockée dans une variable pour une utilisation ultérieure. Nous utilisons cette variable pour appeler la fonction en cas de besoin. De nombreuses langues différentes adoptent ce concept. En fait, vous pouvez utiliser des fonctions lambda dans votre programmation quotidienne JavaScript, en les utilisant comme rappel pour différentes interactions utilisateur et appels AJAX.

$("#myButton").click(function () {
    // do something
});
Copier après la connexion
Copier après la connexion

Ce code est très simple et facile à comprendre, ce qui peut nous faire oublier son aspect fonctionnel. PHP a introduit cette fonctionnalité puissante dans la version 5.3, qui nous permet d'écrire du code PHP de la même manière:

<?php
$square = function ($arg) {
    return $arg * $arg;
};

$value = $square(2); // 4
?>
Copier après la connexion
Copier après la connexion

En parlant de fonctions, en particulier des fonctions anonymes, il est important de comprendre comment gérer la portée variable. Par exemple, JavaScript vous permet d'accéder aux variables de portée externe à l'intérieur de Lambdas, contrairement à PHP. Lambda a sa propre portée à l'intérieur, tout comme les fonctions PHP régulières.

Clôture

Parfois, vous voudrez peut-être vous référer à des variables dans la portée du parent à l'intérieur de la fonction. Les fermetures sont similaires aux fonctions lambda, mais légèrement différentes, et vous pouvez accéder aux variables avec des lunettes externes. Nous pouvons utiliser "Retour à côté" et lier les variables externes en utilisant le mot-clé d'utilisation de PHP, qui a également été introduit dans PHP 5.3.

<?php
function sum($array) {
    if (empty($array))
        return 0;
    else
        return $array[0] + sum(array_slice($array, 1));
}

$total = sum(array(1, 2, 3)); // 6
?>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans ce cas, nous ne faisons pas de taux d'intérêt à chaque fois que la fonction est appelée. Au lieu de cela, nous le définissons en externe et utilisons le mot-clé Utiliser pour le rendre disponible à l'intérieur de la fonction.

fonctions partielles et curry

En termes simples, certaines fonctions sont des fonctions créées à partir de fonctions existantes et leurs paramètres sont appliqués partiellement. Il vous suffit de passer les paramètres restants lorsque vous appelez la fonction créée. Nous pouvons utiliser des fermetures pour créer des fonctions partielles dans PHP. Ceci est un exemple pour trouver le volume d'une boîte en fonction de sa longueur, de sa largeur et de sa hauteur. Tous les paramètres sont facultatifs; si vous ne fournissez pas tous les paramètres, la fonction renvoie une autre fonction pour accepter les valeurs nécessaires.

$("#myButton").click(function () {
    // do something
});
Copier après la connexion
Copier après la connexion

Tous les paramètres sont facultatifs. Vérifiez d'abord si l'appelant a passé tous les paramètres. Dans ce cas, nous pouvons revenir directement au volume en multipliant la longueur, la largeur et la hauteur. Si le nombre de paramètres est inférieur aux paramètres, une nouvelle fonction est renvoyée pour trouver le volume du préréglage du paramètre donné. Supposons maintenant que nous recherchons le volume d'une boîte avec une longueur fixe (par exemple 10). Cela peut être fait facilement en prenant 10 comme premier paramètre, ou nous pouvons créer une fonction partielle en prenant 10 comme premier paramètre, puis en demandant uniquement les valeurs restantes.

<?php
$square = function ($arg) {
    return $arg * $arg;
};

$value = $square(2); // 4
?>
Copier après la connexion
Copier après la connexion

Le currying est un cas particulier de fonctions partielles, où vous convertissez une fonction qui accepte plusieurs paramètres en plusieurs fonctions qui acceptent chacune un seul paramètre. Par exemple, similaire à f (x, y, z) à f (x) (y) (z) (bien que la syntaxe PHP n'autorise pas les appels de fonction imbriqués comme celui-ci). Si vous souhaitez en savoir plus, Timothy Boronczyk a écrit un excellent article sur le curry avec des exemples réels.

PROS et inconvénients

Les fonctions de la programmation fonctionnelle ont de nombreuses utilisations pratiques en PHP. Par exemple, la fonction lambda est largement utilisée lors de l'utilisation des fonctions de rappel. Par exemple, en utilisant le framework Slim, vous pouvez définir l'itinéraire suivant:

<?php
function sum($array) {
    if (empty($array))
        return 0;
    else
        return $array[0] + sum(array_slice($array, 1));
}

$total = sum(array(1, 2, 3)); // 6
?>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Slim appelle la fonction de rappel lorsque l'URL demandée correspond à cette voie. Vance Lucas a écrit quelques articles sur d'autres cas d'utilisation intéressants de fonctions lambda auparavant. Encouragez la programmation sécurisée en évitant les données d'état et variables. Dans la programmation fonctionnelle, vous devez écrire des fonctions qui ne font qu'une seule chose et ne font aucun effet secondaire chacun. L'accent mis par ce paradigme sur la modularité et la simplicité de la fonction peut faciliter la déduction de votre programme en fonction de différents sous-programmes. La programmation fonctionnelle peut également vous aider à rédiger du code qui se concentre sur ce que vous souhaitez réaliser, plutôt que de gérer explicitement les événements accidentels dans le processus (comparer la récursivité à la gestion des variables de compteur de boucle). Mais n'oubliez pas que certains des avantages traditionnellement liés à la programmation fonctionnelle ne s'appliquent pas à PHP car il n'est pas conçu comme un langage de programmation fonctionnelle. Par exemple, les fonctions sans effets secondaires sont idéales pour le traitement parallèle, mais les scripts PHP ne s'exécutent pas de cette façon. Il n'est pas toujours facile de calculer le coût des fonctions récursives et paresseuses, et il peut y avoir de graves problèmes de performance en raison des frais généraux internes. Parfois, il est plus logique d'écrire des programmes avec une variabilité pour améliorer l'efficacité. Le plus grand inconvénient de la programmation fonctionnelle est peut-être qu'il a une courbe d'apprentissage très raide pour ceux qui ont été formés impérativement. Mais dans l'ensemble, la programmation fonctionnelle est amusante, et l'apprentissage vous fournira de nouveaux outils pour penser aux anciens problèmes et vous aider à grandir en tant que programmeur. Ce n'est pas une solution universelle, mais peut être appliquée à un code PHP plus propre et plus élégant au besoin.

Résumé

La programmation fonctionnelle n'est pas seulement un paradigme de programmation; Si vous pouvez faire une réflexion fonctionnelle, vous pouvez programmer fonctionnellement dans presque toutes les langues. Dans cet article, nous discutons des bases de la programmation fonctionnelle, en utilisant les capacités de PHP pour écrire et en fournir des exemples. Bien que les exemples donnés dans cet article ne soient pas pratiques pour vous, vous trouverez de nombreuses situations où les styles fonctionnels peuvent améliorer considérablement la qualité du code que vous écrivez. Essayez de chercher des cas comme celui-ci, pensez fonctionnellement et amusez-vous! images de Fotolia

Des questions fréquemment posées sur la programmation fonctionnelle PHP

Quelle est la principale différence entre la programmation fonctionnelle et la programmation orientée objet dans PHP?

La programmation fonctionnelle et la programmation orientée objet sont deux paradigmes différents utilisés en PHP. La principale différence est la façon dont ils gèrent l'état et les données. Dans la programmation fonctionnelle, les fonctions sont des citoyens de première classe et n'ont aucun concept d'État. Cela signifie que compte tenu de la même entrée, la fonction produira toujours la même sortie. La programmation orientée objet, en revanche, tourne autour des objets et de leurs interactions qui maintiennent l'état et changent avec le temps. Cela peut entraîner différentes sorties, même si l'entrée est la même.

Comment puis-je commencer avec PHP pour la programmation fonctionnelle?

Pour démarrer la programmation fonctionnelle avec PHP, vous devez comprendre des concepts de base tels que les fonctions pures, l'invariance et les fonctions d'ordre supérieur. Ensuite, vous pouvez commencer à écrire des fonctions qui ne modifient pas l'état et n'ont aucun effet secondaire. PHP a des fonctions intégrées qui prennent en charge la programmation fonctionnelle, telle que array_map, array_filter et array_reduce. Vous pouvez également utiliser des bibliothèques comme les collections Laravel qui fournissent des emballages lisses et pratiques pour utiliser des réseaux de données.

Quels sont les avantages de la programmation fonctionnelle en PHP?

La programmation fonctionnelle dans PHP vous permet d'écrire un nettoyant et plus facile à lire le code. Il peut vous aider à éviter les problèmes de programmation courants tels que les effets secondaires et les modifications d'état, ce qui peut rendre votre code plus facile à prévoir et à tester. La programmation fonctionnelle permet également un code plus modulaire car les fonctions peuvent être facilement combinées et réutilisées.

Quelles sont les limites ou les défis de la programmation fonctionnelle à l'aide de PHP?

Bien que la programmation fonctionnelle présente ses avantages, il a également certains défis. Le PHP n'a pas été conçu à l'origine pour la programmation fonctionnelle, donc certaines fonctions peuvent ne pas être aussi puissantes ou efficaces que les langages conçus pour la programmation fonctionnelle. De plus, la programmation fonctionnelle nécessite différentes façons de penser, et la courbe d'apprentissage peut être raide pour les développeurs habitués à la programmation impérative ou orientée objet.

Puis-je utiliser un mélange de programmation fonctionnelle et orientée objet en PHP?

Oui, PHP est un langage multi-paragraphe, ce qui signifie que vous pouvez mélanger différents styles de programmation. Vous pouvez utiliser une programmation orientée objet pour les pièces d'application qui bénéficient de l'état et du comportement, et une programmation fonctionnelle pour les parties d'application qui bénéficient de fonctions apatrides sans effet secondaire. Cela vous donne la flexibilité de choisir la meilleure méthode pour chaque partie de l'application.

Comment la programmation fonctionnelle affecte-t-elle les performances en PHP?

L'impact de la programmation fonctionnelle sur les performances de PHP peut varier. Dans certains cas, la programmation fonctionnelle peut écrire du code plus efficace car il évite les changements d'état et les effets secondaires. Cependant, dans d'autres cas, il peut être inefficace car il implique généralement la création de nouveaux objets plutôt que de modifier les objets existants. Il est important d'analyser et de tester votre code pour vous assurer qu'il répond à vos exigences de performance.

Quelles sont les bonnes ressources pour apprendre la programmation fonctionnelle PHP?

Il existe de nombreuses ressources disponibles pour apprendre la programmation fonctionnelle PHP. Certains bons points de départ incluent le manuel PHP (qui a une section sur la programmation fonctionnelle) ainsi que les tutoriels et articles en ligne. Il existe également des livres sur ce sujet, tels que la programmation fonctionnelle PHP de Gilles Crettenand.

Puis-je utiliser la programmation fonctionnelle pour le développement Web en PHP?

Oui, vous pouvez utiliser la programmation fonctionnelle pour le développement Web en PHP. La programmation fonctionnelle peut vous aider à rédiger un code plus propre et plus modulaire, ce qui peut être bénéfique dans un environnement de développement Web. Cependant, n'oubliez pas que PHP est un langage multi-paragraphe, vous pouvez donc utiliser d'autres styles de programmation, tels que la programmation orientée objet.

Comment gérer la gestion des erreurs dans la programmation fonctionnelle dans PHP?

Dans la programmation fonctionnelle, la gestion des erreurs est généralement effectuée en utilisant des monades, une structure de données qui peut représenter les calculs plutôt que les valeurs. En PHP, vous pouvez utiliser la monade peut-être pour la gestion des erreurs. Cela vous permet de relier les opérations ensemble et si des opérations échouent, le reste de la chaîne sera ignoré.

La programmation fonctionnelle dans PHP est-elle adaptée aux grandes applications?

La programmation fonctionnelle peut être utilisée pour les grandes applications, mais elle dépend des exigences spécifiques de l'application. La programmation fonctionnelle peut écrire un code plus propre, plus modulaire, qui peut être bénéfique dans des environnements à grande échelle. Cependant, il peut également être inefficace dans certains cas, il est donc important de considérer les compromis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal