주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
연길시 신화서점 조선말 도서

PHP 기초중의 기초 - (10) PHP 함수

네로 | 2003.02.24 00:04:52 댓글: 0 조회: 569 추천: 3
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758883
PHP 기초중의 기초 - (10) PHP 함수

글쓴이 : 悲魂(비혼), 2000/07/29(토)

본 강좌의 내용은 PHP를 전혀 모르는 분, 이제 막 PHP 공부를 시작하는 분들을 위한 말 그대로 기초 내용만을 다루고 있습니다. 때문에 PHP를 어느 정도 이상 다루는
분들에겐 가치없는 글일수도 있습니다. 본 강좌는 내용의 수정이 없다면 자유로운 배포 및 이용이 가능합니다. 다만 본 강좌의 내용 중 틀린 부분이나 추가 및 삭제를 원
하는 부분이 있을 시에는 비혼의 조그만 세상(http://soulstar.new21.org/)이나 흑협의 PHP Tip(http://phptip.com/)의 게시판에 글을 남겨주시면 고맙겠습니다.


여름아. 여름의 무더위야. 기다려라. 곧 겨울이 온단다. 핫핫...
더위먹은 비혼이가 끄적거림...


1) 함수(Function)

함수는 크게 두가지로 나눌 수 있습니다. echo()나 date() 등 미리 정의된 함수(built-in function)와 사용자 정의 함수(User Define Function)입니다. 자주 사용되는 부
분을 함수로 만들면 코드도 줄일 수 있고, 보기에도 좋습니다. 예전 강좌중에 swapx라는 사용자 정의 함수를 다뤘었는데 기억나세요...?

1-1) 함수의 형식

function 함수명(인자)
{
실행할 명령들;
}

전의 그 swapx 함수를 예제로 불러와 볼까요?

function swapx(&$a, &$b) {
$temp = $a;
$a = $b;
$b = $temp;
}

함수는 function으로 시작하고 인자는 사용할 수도 있고, 사용하지 않아도 됩니다. 함수는 호출되기 전에 선언되어 있으면 어디서나 호출할 수 있습니다.


1-2) 리턴문(Return Statement)

제어권을 호출자에게 넘겨주는 역할을 합니다. 물론 리턴문을 사용하지 않아도 함수의 마지막 명령에서 제어권이 호출자에게 넘어갑니다. 예제를 통해 알아보겠습니다.


<?php
//exam10-1.php

function test1($name) {
echo "[normal] 나의 이름은 $name 입니다.
n";
}
function test2($name) {
return "[return] 나의 이름은 $name 입니다.
n";
}
test1("비혼");
test2("비혼");
?>


위 예제를 실행하면 어떤 결과가 나올까요? "[normal] 나의 이름은 비혼 입니다."란 문장이 출력됩니다. 왜 test2()의 결과는 보이지 않을까요? 바로 return 뒤의 값만 반
환해주기 때문에 그렇습니다. 즉 반환된 문자열을 제대로 출력하려면 명령을 바꾸어 실행해야겠죠. 다시 예제를 볼까요?


<?php
//exam10-2.php

function test1($name) {
echo "[normal] 나의 이름은 $name 입니다.
n";
}
function test2($name) {
return "[return] 나의 이름은 $name 입니다.
n";
}
test1("비혼");
echo test2("비혼");
?>

한번 실행해 보세요. [normal]..., [return]... 모두 보이면 성공한 것입니다.

또하나의 예제를 들어보겠습니다.


<?php
//exam10-3.php
function sum($a, $b) {
return $a+$b;
}
function ave($a, $b) {
return ($a+$b)/2;
}
echo "국어 80점, 수학 90점의 총점은 " . sum(80,90) ."입니다.
n";
echo "국어 80점, 수학 90점의 평균은 ". ave(80,90) ."입니다.
n";
?>


함수의 리턴값은 변수의 어떤 타입뿐만 아니라 객체도 가능하지만 하나만 리턴할 수 있습니다.그러나~! 하나 이상도 반환할 수 있습니다. 바로 list()라는 함수를 사용하
는 것입니다.

<?php
//exam10-4.php
function total($a, $b) {
$temp1 = $a + $b;
$temp2 = $temp1/2;
return array($temp1, $temp2);
}
list($sum, $ave) = total(80,90);
echo "국어 80점, 수학 90점의 총점은 $sum 입니다.
n";
echo "국어 80점, 수학 90점의 평균은 $ave 입니다.
n";
?>

잘 보고 직접 코드를 작성해 실행해 보세요. ^^; 앞으로의 프로그래밍에서 쓰임새가 많을것 같단 생각이 들죠?


1-3) 인자(Argument)

함수를 정의할때 인자를 함께 선언할 수 있으며 콤마(,)로 구분합니다. 여기서 인자는 함수 내에서 지역변수처럼 사용됩니다. 지역변수, 전역변수 등은 이미 전에 다뤘던
내용입니다. 이때 인자전달방식은 값에 의한 전달이라 했습니다.(Call by Value) 그래서 실제 값엔 영향을 미치지 않는다 했습니다. 그래서 이 실제 저장된 값에 영향을
미치려면 & 연산자를 인자 앞에 붙임으로서 가능하게 했었죠. 기억나시죠? 참조에 의한 전달(Call by Reference) 방식.

이 부분에 대해 생각이 잘 나지 않으신다면 저번 강좌를 들춰보시기 바랍니다. swapx() 함수를 만들어 사용한 예제에 있습니다. ^^; 몇회 강좌일까요? 돌발퀴즈입니다.


1-4) 재귀함수

함수가 자기 자신을 부르는 것을 말합니다. 조금 이상하죠? 재귀함수는 주로 수학 알고리즘 부분에서 주로 사용되며 코드의 효율성을 높입니다. 예제를 볼까요?

<?php
//exam10-5.php
function factorial($i) {
$result = 0;
if($i == 1) return(1);
$result = factorial($i-1)*$i;
return($result);
}

echo factorial(3);
?>


정수의 팩토리얼을 구하는 함수입니다. 팩토리얼이 무엇이냐구요? 수학에서 5! 이런것을 보셨는지요? 5! = 5 * 4 * 3 * 2 * 1 ... 이제 떠오르죠? 찬찬히 코드 설명을 해볼
까요?

먼저 $result의 값을 초기화합니다. 그 다음 $i의 값이 1이면 그냥 1 값을 반환해줍니다. 물론 여기에서 함수 사용을 마치게 됩니다. 만약 1이 아니면 다음 문장을 실행하
겠죠? $result 변수에 현재 자신의 값과 자신의 값에서 1을 뺀 값을 곱한 값을 넣습니다. 이 과정이 반복되어 최종적으로 나온 결과값이 반환되는 거죠.

factorial(3)이라 했으면 $result = 0; $i가 3이니 그냥 다음 문장을 진행합니다. 3($i)과 factorial(2)를 곱합니다. factorial(2)는 2와 factorial(1)을 곱하는데 factorial(1)은
1값을 반환하므로 2와 1을 곱하고 또 3을 곱하니 결국 3*2*1이 되는 것입니다.

이 부분에 대해 잘 설명할 수 있는 분 계세요...? 웅... 이해하시죠? ^^; 이해해주시는 분 멋있는 분...


1-5) 동적호출(Dynamic Call)

예제로 설명을 때웁니다. ^^; 핫핫...

<?php
//exam10-6.php
function cecho($color, $str) {
echo "$strn";
}
$fname = "cecho";
$fname(blue,"비혼의 조그만 세상");
?>

함수의 이름을 변수에 입력했습니다. 그리고 그 변수 뒤에 괄호가 나오고 전달될 인자가 보이죠? 변수값을 함수로 처리하고 변수 뒤의 괄호내 값들을 인자로 받습니다.
결국 이 예제를 실행하면 화면에 파란색 글씨로 "비혼의 조그만 세상"이 찍히게 되죠. 이것저것 다 해보세요. ^^;


1-6) 범위

함수 내의 변수는 함수 내에서만 그 값이 유효합니다. 이미 전 강좌에서 다뤘던 내용이죠? 그럼 복습 차원에서 질문을 던져봅니다. 만약 전역변수, 즉 함수 밖에서 정의된
변수를 함수 내에서 사용하려면 어떻게 해야 할까요?

넵! global이나 GLOBALS["변수명"]을 쓴다 그랬죠.


<?php
//exam10-7.php
$a = 10;
$b = 5;
$c = 0;
function sum($a, $b) {
global $c;
$c = $a+$b;
}
sum($a,$b);
echo "a와 b를 더한 값은 $c 입니다.";
?>


만약 함수 내에 global $c란 명령을 쓰지 않았다면 결과는 0 값이 출력되었겠죠. ^^;
위의 예제를 GLOBALS["변수명"]을 이용해 작성해 보세요. 돌발숙제... 누가누가 잘하나...


2) 마무리

보람찬 하루일을 끝마치고서~ 두다리 쭈욱펴면 온몸이 쑤시네... -_-;;;
아참. 댓글을 꼬박꼬박 달아주시는 모님, 고마워엽. 열심히 하세엽~
궁금한거 있음 댓글 달아주세요~

그럼 즐겁게 PHP~


----------------------------------------------------------------------
PHP 기초중의 기초 - (10) PHP 함수 : http://soulstar.new21.org/study/study10.htm
예제 확인 - http://soulstar.new21.org/study/exam10-1.php
예제 확인 - http://soulstar.new21.org/study/exam10-2.php
예제 확인 - http://soulstar.new21.org/study/exam10-3.php
예제 확인 - http://soulstar.new21.org/study/exam10-4.php
예제 확인 - http://soulstar.new21.org/study/exam10-5.php
예제 확인 - http://soulstar.new21.org/study/exam10-6.php
예제 확인 - http://soulstar.new21.org/study/exam10-7.php

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

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (3) 선물 (0명)
IP: ♡.27.♡.234
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11972
관리자
2003-09-20
11527
관리자
2003-09-20
20673
지구인
2010-08-27
19455
지구인
2009-09-07
13774
SOLIDH
2010-01-29
15735
엔죠라이프
2004-10-07
16825
네로
2003-02-24
629
네로
2003-02-24
562
네로
2003-02-24
1122
네로
2003-02-24
654
네로
2003-02-24
438
네로
2003-02-24
478
네로
2003-02-24
470
네로
2003-02-24
426
네로
2003-02-24
386
네로
2003-02-24
438
네로
2003-02-24
426
네로
2003-02-24
428
네로
2003-02-24
526
네로
2003-02-24
514
네로
2003-02-24
1442
네로
2003-02-24
719
네로
2003-02-24
569
네로
2003-02-24
538
네로
2003-02-24
676
네로
2003-02-24
628
네로
2003-02-24
489
모이자 모바일