developer tip

함수 내부의 기능.?

copycodes 2020. 11. 23. 08:19
반응형

함수 내부의 기능.?


이 코드는 결과를 56으로 생성합니다.

function x ($y) {
    function y ($z) {
        return ($z*2);
    }

    return($y+3);
}

$y = 4;
$y = x($y)*y($y);
echo $y;

안에 무슨 일이 일어나고 있는지 아십니까? 혼란 스럽습니다.


X는 (값 +3)을 반환하고 Y는 (값 * 2)를 반환합니다.

값이 4이면 (4+3) * (4*2) = 7 * 8 = 56.

함수의 범위가 제한되지는 않지만 (함수 정의를 안전하게 '중첩'할 수 있음)이 특정 예제는 오류가 발생하기 쉽습니다.

1)를 호출 y()하기 전에 호출 할 수 없습니다 . 한 번 실행 되기 전까지 x()함수 y()가 실제로 정의되지 않기 때문 x()입니다.

2) x()두 번 호출 하면 PHP가 함수를 재 선언 y()하여 치명적인 오류가 발생합니다.

치명적인 오류 : y ()를 다시 선언 할 수 없습니다.

둘 다에 대한 해결책은 코드를 분할하여 두 함수가 서로 독립적으로 선언되도록하는 것입니다.

function x ($y) 
{
  return($y+3);
}

function y ($z)
{
  return ($z*2);
}

이것은 또한 훨씬 더 읽기 쉽습니다.


(4+3)*(4*2) == 56

PHP는 부모 함수의 범위에서만 정의 된 것처럼 실제로 "중첩 함수"를 지원하지 않습니다. 모든 함수는 전역 적으로 정의됩니다. 문서를 참조하십시오 .


해당 코드의 작성자가 원하는 것이 무엇인지 확실하지 않습니다. 다른 함수 내부에 함수를 정의한다고해서 내부 함수가 외부 함수 내부에서만 보이는 것은 아닙니다. x ()를 처음 호출하면 y () 함수도 전역 범위에있게됩니다.


이것은 정적 속성, 참조 등이없는 재귀에 유용한 개념입니다.

function getReqursiveItems($id){
    $allItems = array();

    function getItemms($parent_id){
       return DB::findAll()->where('`parent_id` = $parent_id');
    } 

    foreach(getItems($id) as $item){
         $allItems = array_merge($allItems, getItems($item->id) );
    }

    return $allItems;
}

다른 함수 내부에서 함수를 정의 할 수 있습니다. 내부 함수는 외부 함수가 실행될 때까지 존재하지 않습니다.

echo function_exists("y") ? 'y is defined\n' : 'y is not defined \n';
$x=x(2);
echo function_exists("y") ? 'y is defined\n' : 'y is not defined \n';

산출

y가 정의되지 않았습니다.

y가 정의 됨

x를 실행하기 전에 함수 y를 호출 할 수없는 간단한 것


귀하의 쿼리는 7 * 8입니다.

x(4) = 4+3 = 7y(4) = 4*2 = 8

what happens is when function x is called it creates function y, it does not run it.

참고URL : https://stackoverflow.com/questions/1631535/function-inside-a-function

반응형