include 된 파일에서 return 을 해서 다음과 같이 값을 받을 수 있다.
test.php
$ret = include 'test2.php';
echo $ret;
?>
test2.php
return 'val';
?>
main 함수(PHP_SELF)에서 return 을 사용하면 exit의 효과가 된다.
또한 return 이후의 구문에서 정의된 함수라도 사용할 수 있다.
test1();
return; // 실행은 여기서 종료된다.
function test1(){
echo '11111';
}
?>
이번에는 이 특성을 함수가 겹치지 않게 정의하는 용도로 사용해보자. 함수가 겹치지 않으려면 다음과 같은 방법이 있다.
첫번째로는 if 문을 이용한다.
...
if (function_exists('~~~')) {
// 함수정의부
}
...
?>
두번째 방법은 return을 이용하는 것인데 보통 함수파일들을 include해서 사용하는 것을 생각해보면 나름대로 쓸만하다.
test.php
include 'test2.php';
test1();
function test1() {
echo '1111';
}
?>
test2.php
if (function_exists('test1')) return false;
function test1() {
echo '2222';
}
?>
이 경우에는 test2.php 의 test1()이 아예 무시된다. 그런데 재미있는 것은 이 경우라도 겹치지 않는 함수에 대해서는 실행이 가능하다는 것이다. 게다가 if 구문 없이 무작정 return 을 해줘도 가능하다!!
test.php
include 'test2.php';
test1();
test2();
function test1() {
echo '1111';
}
?>
test2.php
return;
function test1() {
echo '2222';
}
function test2() {
echo '어라? 이건 되네?';
}
?>
저는 주로 함수를 끝머리에서 정의하는데, 이런 식으로 사용한다면 겹치지 않게 정의를 할 수 있을 것 같습니다. 마지막으로 하나더. 그럼 다른 겹치는 함수가 겹치지 않는 함수 다음에 나온다면?
test.php
include 'test2.php';
test1();
test2();
test3();
function test1() {
echo '1111';
}
function test3() {
echo '내가 먼저 했음';
}
?>
test2.php
return;
function test1() {
echo '2222';
}
function test2() {
echo '어라? 이건 되네?';
}
function test3() {
echo '얜 또 안돼네..';
}
?>
"내가 먼저 했음" 이 나옵니다.