>  기사  >  백엔드 개발  >  PHP 중첩 함수를 해당 범위 외부에서 호출할 수 있나요?

PHP 중첩 함수를 해당 범위 외부에서 호출할 수 있나요?

DDD
DDD원래의
2024-10-29 01:05:29493검색

Can PHP Nested Functions Be Called Outside Their Enclosing Scope?

중첩된 PHP 함수: 목적 및 사용법

PHP 영역에서 중첩된 함수는 코드 캡슐화 및 구성 요소를 도입합니다. JavaScript만큼 널리 사용되지는 않지만 PHP 중첩 함수는 특정 시나리오에서 틈새 시장을 찾습니다.

다음 예를 고려하세요.

<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>

관찰할 수 있듯이, inner() 함수를 외부() 함수 외부에서 직접 호출하면 외부() 함수 범위로 제한되므로 치명적인 오류가 발생합니다. 이 동작은 중첩된 함수가 바깥쪽 함수의 범위를 상속하고 해당 범위 외부에서 액세스할 수 없는 어휘 범위 개념과 일치합니다.

PHP 5.3 이상으로 작업하는 경우 다음을 활용할 수 있습니다. 좀 더 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>

출력:

test
test

이 예에서 익명 함수 $inner는 external() 함수 내에 정의되어 있으며 해당 범위에 대한 액세스. 그러나 해당 범위로 제한되어 있으며 전역 범위에서 직접 호출할 수 없습니다.

위 내용은 PHP 중첩 함수를 해당 범위 외부에서 호출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.