함수 내부의 기능.?
이 코드는 결과를 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 = 7
과 y(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
'developer tip' 카테고리의 다른 글
명령 줄로 Windows 스케줄러를 시작하는 방법은 무엇입니까? (0) | 2020.11.23 |
---|---|
PHP 구문 질문 : 물음표와 콜론은 무엇을 의미합니까? (0) | 2020.11.23 |
Ruby 및 Rails 개발자가 알아야 할 사항은 무엇입니까? (0) | 2020.11.23 |
Visual Studio 2010을 사용하여 명령 줄에서 C # 솔루션 빌드 (0) | 2020.11.23 |
mysqldump : 백업 할 때 삽입 할 열 이름 생성 (0) | 2020.11.23 |