Les fonctions imbriquées PHP peuvent-elles être appelées en dehors de leur portée ?

DDD
Libérer: 2024-10-29 01:05:29
original
492 Les gens l'ont consulté

Can PHP Nested Functions Be Called Outside Their Enclosing Scope?

Fonctions PHP imbriquées : objectif et utilisation

Dans le domaine de PHP, les fonctions imbriquées introduisent un élément d'encapsulation et d'organisation du code. Même si elles ne sont peut-être pas aussi omniprésentes que leurs homologues JavaScript, les fonctions imbriquées PHP trouvent leur place dans certains scénarios.

Considérez cet exemple :

<code class="php">function outer($msg)
{
    function inner($msg)
    {
        echo 'inner: ' . $msg . ' ';
    }

    echo 'outer: ' . $msg . ' ';
    inner($msg);
}

inner('test1'); // Fatal error: Call to undefined function inner()
outer('test2'); // outer: test2 inner: test2
inner('test3'); // inner: test3
outer('test4'); // Fatal error: Cannot redeclare inner()</code>
Copier après la connexion

Comme vous pouvez le constater, lorsque vous essayez de invoquez la fonction inner() directement en dehors de la fonction external(), cela entraîne une erreur fatale car elle est limitée à la portée de la fonction external(). Ce comportement s'aligne sur le concept de portée lexicale, où une fonction imbriquée hérite de la portée de sa fonction englobante et n'est pas accessible depuis l'extérieur de cette portée.

Si vous travaillez avec PHP 5.3 ou version ultérieure, vous pouvez tirer parti fonctions anonymes pour obtenir un comportement plus proche de celui de JavaScript :

<code class="php">function outer()
{
    $inner = function() {
        echo "test\n";
    };

    $inner();
}

outer();
outer();

inner(); // PHP Fatal error: Call to undefined function inner()
$inner(); // PHP Fatal error: Function name must be a string</code>
Copier après la connexion

Sortie :

test
test
Copier après la connexion

Dans cet exemple, la fonction anonyme $inner est définie dans la fonction external() et a accès à son périmètre. Cependant, il reste limité à cette portée et ne peut pas être invoqué directement depuis la portée globale.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!