주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

PHP 입문 - 함수, require, include

광수 | 2001.10.17 00:18:59 댓글: 0 조회: 509 추천: 4
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758805
▶ PHP 입문 - 함수, require, include

실제 프로그램을 작성하기에 앞서 알아둬야할 기본적인 문법들입니다.


여러번 반복적으로 수행되는 코드를 따로 떼어내 함수로 만들어두면 프로그램이
상단히 간결해집니다. 함수의 여러 형태에 대해 예제로 알아보겠습니다.


▷ 함수의 정의

1부터 100까지 출력, 150부터 200까지 출력, 350부터 380까지 출력하는 프로그램을
만들어볼까요?


예제 : http://dreamphp.com/study/exam13-1.php

소스는 다음과 같습니다.

<?
// for문만 이용했을 경우
echo "[1-100] ";
for ($i=1;$i<=100;$i++) {
  echo $i." ";
}
echo "<br>";

echo "[150-200] ";
for ($i=150;$i<=200;$i++) {
  echo $i." ";
}
echo "<br>";

echo "[350-380] ";
for ($i=350;$i<=380;$i++) {
  echo $i." ";
}
echo "<br>";
?>

위의 프로그램은 for문을 3번 사용했습니다. 가만 살펴보면 중복되는 부분이 있죠?

echo "[시작할값-끝낼값] ";
for ($i=시작할값;$i<=끝낼값;$i++) {
  echo $i." ";
}
echo "<br>";

이 부분을 함수로 만들어 사용하면 됩니다.


예제 : http://dreamphp.com/study/exam13-2.php

소스는 다음과 같습니다.

<?
function scope ($start, $end) {
  echo "[".$start."-".$end."] ";
  for ($i=$start; $i<=$end; $i++) {
    echo $i." ";
  }
  echo "<br>";
}
scope(1,100);
scope(150,200);
scope(350,380);
?>

훨씬 간단해졌죠? 함수의 지정 방법은 다음과 같습니다.

function 함수명 (인자1, 인자2, ...) {
  실행할 명령;
  :
  return 반환값;
}

인자와 return 반환값 등은 없어도 상관 없습니다. 응용하기 나름이죠. 다양한
쓰임새는 실제 프로그램을 작성할때 많이 나올거에요.



▷ 값의 전달과 변수의 범위

값을 전달하는 방법은 값에 의한 전달, 참조에 의한 전달이 있습니다. 그리고
변수의 사용 범위는 지역변수와 전역변수가 있구요. 예제를 통해 이해하는 방법이
제일 빠릅니다.

먼저 위에 다루었던 두번째 예제 exam13-2.php 있죠?

function scope ($start, $end) {
  echo "[".$start."-".$end."] ";
  for ($i=$start; $i<=$end; $i++) {
    echo $i." ";
  }
  echo "<br>";
}
scope(1,100);

값에 의한 전달을 하는 대표적인 예제입니다. scope(값1,값2);로 해당 값만 전달해
처리하는 스타일이죠. 함수 내에 사용된 변수는 함수 내에서만 유효합니다. 함수 밖의
변수와 이름이 같아도 상관이 없습니다. 음. 이를 다른 식으로 표현해볼까요?

예제 : http://dreamphp.com/study/exam13-3.php

소스는 다음과 같습니다.

<?
function plus ($a, $b) { // 인자 2개 받는 사용자 함수 지정
  $a = $a * 100; // $a의 값에 100을 곱한 값을 $a에 저장
  $b = $b * 100; // $b의 값에 100을 곱한 값을 $b에 저장
  $c = $a + $b; // $a와 $b의 값을 합해 $c에 저장
  echo "a*100 + b*100 = ".$c; // 값 출력
}

$a = 3; // $a 변수의 값은 3
$b = 2; // $b 변수의 값은 2

echo "함수 호출 전 a의 값은 ".$a."<br>";
echo "함수 호출 전 b의 값은 ".$b."<br>";

plus($a,$b); // 함수 호출

echo "<br>";
echo "함수 실행 후 a의 값은 ".$a."<br>";
echo "함수 실행 후 b의 값은 ".$b;
?>

실행하면 다음과 같은 결과물을 보입니다.

함수 호출 전 a의 값은 3
함수 호출 전 b의 값은 2
a*100 + b*100 = 500
함수 실행 후 a의 값은 3
함수 실행 후 b의 값은 2

이를 통해 함수에서 지정된 변수는 함수 내에서만 쓰인다는 사실을 알게 되었죠?
함수 내에서 값의 변화가 있어도 함수 밖 원래의 값에는 변함이 없다는 점 잊지
마세요.

그럼 참조에 의한 전달을 해볼까요?

예제 : http://dreamphp.com/study/exam13-4.php

소스는 다음과 같습니다.

<?
function plus (&$aa, &$bb) { // 인자 2개 받는 사용자 함수 지정
  $aa = $aa * 100; // $a의 값에 100을 곱한 값을 $a에 저장
  $bb = $bb * 100; // $b의 값에 100을 곱한 값을 $b에 저장
  $c = $aa + $bb; // $a와 $b의 값을 합해 $c에 저장
  echo "a*100 + b*100 = ".$c; // 값 출력
}

$a = 3; // $a 변수의 값은 3
$b = 2; // $b 변수의 값은 2

echo "함수 호출 전 a의 값은 ".$a."<br>";
echo "함수 호출 전 b의 값은 ".$b."<br>";

plus($a,$b); // 함수 호출

echo "<br>";
echo "함수 실행 후 a의 값은 ".$a."<br>";
echo "함수 실행 후 b의 값은 ".$b;
?>

다른 부분은 예제 exam13-3.php와 똑같은데 함수 인자 부분에 &를 붙인 것만
다릅니다. 해당 변수의 주소를 이용하기 때문에 함수 내에서 값이 변경된 결과가
반영되는 것입니다. 그래서 결과값은 다음과 같습니다.

함수 호출 전 a의 값은 3
함수 호출 전 b의 값은 2
a*100 + b*100 = 500
함수 실행 후 a의 값은 300
함수 실행 후 b의 값은 200

plus($a,$b);라고 호출을 했는데 이 값을 넘겨받은 인자는 &$aa, &$bb 등으로 해당
변수의 주소값을 받아 처리하는 것이죠. 이해를 돕기 위해 이름을 달리 주어본
것입니다.

예제에서 다뤘듯이 함수 내의 변수는 함수 내에서만 유효하고, 함수 밖의 변수는
함수 밖에서만 유효합니다. 그래서 함수 내에서도 밖의 변수를 사용하기 위해서는
&를 붙여 참조에 의한 전달을 하는 방법도 있으며 다음의 예제처럼 global 함수를
사용하는 방법도 있습니다.


예제 : http://dreamphp.com/study/exam13-5.php

소스는 다음과 같습니다.

<?
$name1 = "홍길동";
$name2 = "임걱정";

function show_name1() {
  echo "[함수내 1] ".$name1." and ".$name2."<br>";
}

function show_name2() {
  global $name1,$name2;
  echo "[함수내 2] ".$name1." and ".$name2."<br>";
}

echo "[함수밖] ".$name1." and ".$name2."<br>";

show_name1();
show_name2();
?>

먼저 $name1, $name2 변수에 값을 할당한 다음 함수 호출 전에 값을 출력했습니다.
그 다음 show_name1, show_name2 함수를 호출했죠. 처음 함수에서는 이름값이
출력되지 않습니다. 함수 내의 변수는 함수 내에서만 유효하기 때문이죠. (지역변수)

하지만 두번째 함수에서는 global 명령을 사용했기 때문에 참조가 가능해 (전역변수)
이름을 출력한 것입니다. 실행 결과물은 다음과 같습니다.

[함수밖] 홍길동 and 임걱정
[함수내 1] and
[함수내 2] 홍길동 and 임걱정

※ 함수는 사용 이전에 정의되어 있어야 합니다. ^^;


▷ require, include

프로그램을 작성하는 과정에서 위의 예제처럼 중복되는 코드를 함수로 만들어두면 참
편리합니다. 위의 함수들만 따로 모아 하나의 파일로 저장해두고, 이를 아래의 명령을
통해 포함시켜 이용하게 됩니다.

require "파일명";
include "파일명";

두 명령을 비슷합니다만 주로 함수만 모아놓은 파일은 PHP 프로그램 제일 첫부분에
require문을 이용해 포함시키고, 프로그램 내에서 반복적으로 불러 실행되어야 할
코드만 모아놓은 파일은 필요한 부분에서 include문을 사용합니다.


예제를 통해 알아보도록 할까요?

예제 : http://dreamphp.com/study/exam13-6.php

소스는 다음과 같습니다.

<?
function call ($a, $b) {
  $temp[plus] = $a+$b;
  $temp[minus] = $a-$b;
  $temp[multi] = $a*$b;
  $temp[divi] = $a/$b;
  $temp[aver] = $temp[plus]/2;
  return $temp;
}
?>

함수 선언만 되어있습니다. 그렇기 때문에 실행해도 화면에는 어떠한 결과도
출력되지 않습니다. 또한 함수의 마지막에 반환문이 있기 때문에 함수를 호출할 때
반환받은 값을 저장할 변수를 지정해줘야 합니다. 아래처럼 말이죠.

$value = call($a,$b);

위의 경우 연관배열 형태로 반환해주니, 이를 받은 쪽에서는 출력할 경우 첨자를
지정해주면 됩니다. echo $value[plus]; 처럼. 계속 진행하겠습니다.


예제 : http://dreamphp.com/study/exam13-7.php

소스는 다음과 같습니다.

<?
echo "<table border=0 cellpadding=2 cellspacing=0 width=100%>
  <tr>
    <td bgcolor=#eeeeee align=center>
<font size=2>a($a) b($b) ... plus $temp[plus]
/ minus $temp[minus]
/ multi $temp[multi]
/ divi $temp[divi]
/ aver $temp[aver]</font>
    </td>
  </tr>
</table>
";
?>

테이블 내에 $a, $b, $temp[xxx] 값들을 출력하는 코드만 있습니다. 그냥 실행할
경우 아무런 값도 없기 때문에 아래와 같은 출력물을 보입니다.

a() b() ... plus / minus / multi / divi / aver


예제 : http://dreamphp.com/study/exam13-8.php

소스는 다음과 같습니다.

<?
require "exam13-6.php"; // 파일 포함
for ($i=10; $i<=20; $i++) { // $i는 10부터 20까지 1씩 증가
   for ($j=2; $j<=18; $j=$j+2) { // $j는 2부터 18까지 2씩 증가
     $a = $i; // $a의 값은 $i의 값으로 지정
     $b = $j; // $b의 값은 $j의 값으로 지정
     $temp = call($a,$b); // exam13-6.php에 지정된 함수 호출
     include "exam13-7.php"; // 파일 실행
   }
}
?>

제일 처음 선언된 함수 파일을 require문을 이용해 포함시킵니다. 그 다음 for문을
두개 이용해 자동으로 증가하는 변수 2개의 값을 각각 $a와 $b라는 이름에 저장하고,
이를 이용해 call() 함수를 호출하고 반환받은 값을 $temp에 저장합니다. 다음으로
exam13-7.php 파일을 include하여 값을 출력하는 것이죠. 사용하기 나름입니다. ^^;


구구단 출력과 같은 간단한 프로그램이 아닌 이보다 규모가 더 큰 프로그램을 작성할
경우에는 함수와 require, include 등이 큰 도움이 됩니다. 자신만의 함수가 많아지면
이를 정리해 매번 함수를 만드는게 아니라 이 파일만 포함시켜 이용하면 편하겠죠?

끝으로 예제 exam13-7.php와 exam13-8.php를 보다 간단히 표현한 형태를 보겠습니다.


예제 : http://dreamphp.com/study/exam13-9.php

소스는 다음과 같습니다.

<table border=0 cellpadding=2 cellspacing=0 width=100%>
  <tr>
    <td bgcolor=#eeeeee align=center>
<font size=2>a(<?=$a?>) b(<?=$b?>) ... plus <?=$temp[plus]?>
/ minus <?=$temp[minus]?>
/ multi <?=$temp[multi]?>
/ divi <?=$temp[divi]?>
/ aver <?=$temp[aver]?></font>
    </td>
  </tr>
</table>

어떤 차이가 있냐구요? 제일 처음 PHP의 시작을 알리는 <?가 없습니다. 물론 중간중간
<?=변수?>를 사용했지만요. 일반 HTML로 테이블 구성을 쉽게 할 수 있습니다. 그
상태에서 출력할 변수의 값을 <?=변수?> 이런 식으로 지정해두면 쉽게 결과물을 얻을
수 있습니다. 게시판이나 방명록 등에서 반복적으로 출력해줘야 하는 부분에서 위와
같은 식으로 사용할 경우 대단히 편리함을 느낄 수 있을 것입니다.


예제 : http://dreamphp.com/study/exam13-10.php

소스는 다음과 같습니다.

<?
require "exam13-6.php"; // 파일 포함
for ($i=10; $i<=20; $i++) { // $i는 10부터 20까지 1씩 증가
   for ($j=2; $j<=18; $j+=2) { // $j는 2부터 18까지 2씩 증가
     $a = $i; // $a의 값은 $i의 값으로 지정
     $b = $j; // $b의 값은 $j의 값으로 지정
     $temp = call($a,$b); // exam13-6.php에 지정된 함수 호출
     include "exam13-9.php"; // 파일 실행
   }
}
?>

예제 exam13-8.php 파일과 어떤 차이가 있냐구요? 두번째 for문에서 증가문 보이죠?
$j=$j+2 라고 한 것을 여기에서는 $j+=2 라고 표현했습니다.

$a = $a + 5; => $a += 5;
$b = $b - 2; => $b -= 2;
$c = $c * 3; => $c *= 3;
$d = $d / 3; => $d /= 3;
$e = $e % 2; => $e %= 2;
$f = $f." Fighting!"; => $f.=" Fighting!"; // 연산자에서 다룬바 있습니다.


▶ 조금 길었습니다. 차근차근 보시고, 직접 프로그램을 작성해보세요.

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (4) 선물 (0명)
IP: ♡.149.♡.65
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11866
관리자
2003-09-20
11414
관리자
2003-09-20
20548
지구인
2010-08-27
19343
지구인
2009-09-07
13665
SOLIDH
2010-01-29
15624
엔죠라이프
2004-10-07
16720
광수
2001-10-17
424
광수
2001-10-17
576
광수
2001-10-17
719
광수
2001-10-17
372
광수
2001-10-17
445
광수
2001-10-17
709
광수
2001-10-17
591
광수
2001-10-17
565
광수
2001-10-17
597
광수
2001-10-17
503
광수
2001-10-17
622
광수
2001-10-17
832
광수
2001-10-17
792
광수
2001-10-17
628
광수
2001-10-17
786
광수
2001-10-17
450
광수
2001-10-17
509
광수
2001-10-17
445
광수
2001-10-17
656
광수
2001-10-17
508
광수
2001-10-17
732
모이자 모바일