제어 구조 - include , require , return
제어구조
require()와 include()
이 두 구조는 외부 파일을 대체하는 기능을 합니다.
require('somefile.html');
include('somefile.html');
위와 같은 형식으로 사용하는데.. 아래의 예를 보시면 쉽게 이해하실 수 있을것입니다.
head.html
<!-- 여기부터 -->
<html>
<head>
<title>include 테스트</title>
</head>
<body>
<!-- 여기까지 head.html 입니다. -->
main.php
<!-- main.php 시작부분 -->
<?php include('head.html'); ?>
WOW
</body>
</html>
<!-- main.php 마지막부분 -->
결과 : main.php
WOW
HTML 소스보기
<!-- main.php 시작부분 -->
<!-- 여기부터 -->
<html>
<head>
<title>include 테스트</title>
</head>
<body>
<!-- 여기까지 head.html 입니다. -->
WOW
</body>
</html>
<!-- main.php 마지막부분 -->
include() 문 자리에 head.html의 소스가 고스란히 들어간 결과와 같게 됩니다.
그럼 이번엔 PHP 파일을 인클루드 해보겠습니다.
main.php
<?php
echo "다우니와 함께하는 PHP 따라잡기<BR>";
include "inc.php";
echo "지금 쓰는 이름과 예전에 쓰던 홈피 이름";
?>
inc.php
<?php
echo "나도 이제 PHPer - 피에치피어<BR>";
?>
결과 : main.php
다우니와 함께하는 PHP 따라잡기
나도 이제 PHPer - 피에치피어
지금 쓰는 이름과 예전에 쓰던 홈피 이름
여기서 주의해야 할 점이 있습니다.
include()문이 파일로 대체된다고 해서 inc.php 파일에 를 빼버린다면..
다우니와 함께하는 PHP 따라잡기
echo "나도 이제 PHPer - 피에치피어
";지금 쓰는 이름과 예전에 쓰던 홈피 이름
위의 결과처럼 인클루드된 파일은 PHP 소스가 아니라 그저 HTML인것으로 이해하게 됩니다.
이러한 결과를 내는 이유는 include()와 require()가 실행될 때 기본적으로 HTML 모드로 읽어
들이기 때문입니다. 따라서 인클루드될 파일에 같은 PHP 시작,끝 태그가 없으면
실제로 PHP 소스일지라도 그저 HTML 파일로만 인식하게 됩니다.
위의 예제들은 모두 require() 문으로 대체해도 똑같은 결과를 얻을 수 있습니다.
"그럼 왜 불필요하게 같은 기능을 하는게 두개가 있을까?" 하는 의문을 가지실 겁니다.
답부터 말씀드리면 둘은 똑같지는 않기때문입니다.
기능이 비슷하긴 하지만 엄연히 다른부분이 있습니다.
require()와 include()의 차이점
PHP4 부터는 require 와 include 가 두가지 점을 제외하고 동일한 기능을 합니다.
첫 번째, require 는 수행실패시 Fatal Error를 내고 프로그램이 그 자리에서 종료됩니다.
뒤에 다른 PHP 코드가 있더라도 말이죠.
그러나 include 는 수행실패시 Warning 만 출력하고 나머지 코드를 모두 수행합니다.
두 번째, 같은 파일을 여러번 require 하더라도 딱 한번만 수행합니다.
그러나 include 는 같은 파일을 여러번 include 해도 상관없습니다.
return
return 은 함수에서 사용하는 제어 구조입니다.
함수 내부에서 함수의 수행을 중단하고 함수 호출 결과를 return 의 인자로 넘겨줍니다.
<?php
function add ($a,$b) {
$sum = $a + $b;
return $sum;
echo "나는 절대 출력안됩니다.";
}
$result = add(10,20);
echo $result;
?>
위처럼 함수를 호출한 결과를 return을 통해 전달하고 전달된 인자는 $result 변수에 저장이 됩니다.
결과는
30
그러나 함수내의 echo 문은 절대로 수행이 되지 않는데요.
그 이유는 return 때문에 함수 수행이 종료되기 때문입니다.