[PHP]코딩팁 - include와 return의 특성

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 '얜 또 안돼네..';
}
?>

"내가 먼저 했음" 이 나옵니다.

댓글을 남겨주세요

This site uses Akismet to reduce spam. Learn how your comment data is processed.