PHP

PHP 함수

starryoon 2023. 6. 9. 00:38

함수란?

 

하나의 특별한 목적의 작업을 수행하도록 설계된 독립적인 블록

 

반복적인 코드의 작성을 피할 수 있음

 

함수의 구조

1.함수이름

2.괄호안에 쉼표(,)로 구분되는 함수의 매개변수(parameter)

3.중괄호로 둘러싸인 PHP 수행코드

 

function 함수이름(매개변수1, 매개변수2, ...)

{

   함수가 호출 되었을 때 실행될 코드

}

 

함수의 이름은 함수를 구분하는 식별자

 

함수의 호출

 

PHP가 미리 정의하여 제공하는 함수는 모든 PHP 스크립트에서 사용할 수 있음

 

하지만 사용자가 직접 정의한 함수는 해당 함수가 정의된 PHP 스크립트에서만 호출 가능

 

 

PHP의 모든 함수와 클래스는 전역 범위 (global scope)를 가짐

 

$sum = sum(1,2)

 

함수의 값 반환

 

PHP에서 함수는 반환문(return)을 포함할 수도 있고, 포함하지 않을 수도 있음

 

function sum($x, $y) // 함수의 이름은 sum()이며, 변수 x,y를 매개변수로 가지는 함수를 정의함
{
	return $x + $y; // 매개변수 x,y를 더한 값을 반환
}

echo sum(1,2)

 

 

PHP 7부터는 함수의 반환값을 원하는 타입으로 반환 받을 수 있도록, 반환값의 타입 직접 지정할 수 있음

 

강한 강도에서는 반환값의 타입이 일치하지 X -> 오류 발생

 

 

 

 

 

<약한 강도로 함수의 반환 타입을 설정>

 

function sum($x, $y) : float // 반환값의 타입을 float으로 설정함
{

	return $x + $y;
    
}

...

var_dump(sum(3+4)); //float

 

 

정수 2개 (3,4)를 인수로 전달 받았으나 반환 타입이 float으로 설정되었으므로 자동 변환되어 반환

 

 

 

<강한 강도로 함수의 반환 타입을 설정>

 

 

 

declare(strict_types = 1); //strict 모드로 설정함.

function sum($x, $y):float // 반환값의 타입을 float타입으로
{

	return $x + $y;
    
}

...

var_dump(sum(3+4)); //오류 발생
var_dump(sum(3+4.5)); //float

 

 

declare문을 사용하여 strict 모드를 설정

 

인수 중 하나를 float타입으로 전달해야 정상 반환 됨.

 

 

 

 

 

 

 

매개 변수의 전달 방식

 

1. 값 전달 방식

2. 참조 전달 방식

 

값 전달

 

기본적으로 함수의 인수는 값 전달 방식으로 매개변수로 전달

 

인수를 함수에 전달하면, 새롭게 생성된 매개변수에 전달받은 값이 복사되어 저장

 

매개변수에 저장된 값은 전달받은 데이터의 복사본, 함수 안에서 변경되어도 함수 밖의 원본 데이터에 영향X

 

function increment($para)
{
	$para++; // $value의 값을 복사하여 increment()함수에 인수로 전달
}

$value = 1;
increment($value)

 

매개변수 $para는 함수가 호출될 때 생성되며, 전달받은 값인 1을 2로 증가

 

하지만 함수 밖에 존재하는 변수 $value의 값은 변하지 X

 

참조 전달(passing by reference)

전달받은 원본 데이터에 대한 참조 변수를 매개변수에 전달

 

참조 전달은 원본 데이터의 복사된 값을 가지는것이 아닌, 원본 데이터를 그대로 참조

 

함수 내부에서 값을 변경하면, 함수 밖의 원본 데이터도 같이 변경

 

function increment(&$para)
{
	$para++;
}
$value = 1;
increment($value);

 

 

디폴트 매개변수

 

함수를 호출할 때 명시된 매개변수를 전달하지 않았을 경우에 사용하게 될 기본값을 의미

 

매개변수의 이름과 함께 대입 연산자를 이용하여 설정

 

 

 

 

function sum($value1$value2 = 0$value3 = 0)

 

 

 

function sum($value1, $value2=0, $value3 = 0)
{
	return $value1 + $value2 + $value3;
}

echo sum(1,2,3); //6
echo sum(1,2); //3
echo sum(1); //1
//echo sum(); //오류 발생

 

 

가변 길이 인수 목록

 

가변 길이 인수 목록 => 전달 받을 인수의 개수를 미리 정하지 않고, 호출할 때마다 유동적으로 인수를 넘기는 기능

 

'...' 토큰을 사용하여 간편하게 설정

 

function sum(...$num)
{
    $sum = 0;
    foreach($num as $n){
    	$sum += $n;
    }
    return $sum;
}

 

 

조건적인 함수

 

특정 조건을 만족할 때만 선언되는 함수

 

$makefunc = true;
if($makefunc){
	function func()
    {
    	echo"이제 함수를 사용할 수 있습니다.";
    }
    
    func(); //이 부분은 func() 함수가 선언되었으므로, 함수를 호출할 수 있습니다.
}

 

 

>>>결과

 

이제 함수를 사용할 수 있습니다.

 

 

함수안의 함수

 

PHP에서는 함수 안에 또 다른 함수를 선언할 수 있음

 

PHP에서 모든 함수는 전역함수 이므로, 함수 내부에서 선언된 함수라도 해당 함수 외부에서 호출할 수 있음

 

 

function out()
{
	function in()
    {
    	echo"이제 함수를 사용할 수 있습니다!";
    }
}

//in(); //이 부분은 in() 함수가 선언되기 전이므로, 호출 불가
out();
in(); //이제 사용 가능!

 

 

아직 단 한 번도 out() 함수가 호출되지 않았으므로, in() 함수가 정의되어 있지 않음

 

out() 함수가 호출되면서 비로소 in() 함수도 같이 정의됨

 

 

재귀 함수(recursive function)

 

함수 내부에서 함수가 자기 자신을 또다시 호출하는 함수를 의미

 

끝없이 반복하므로 재귀 호출을 중단하도록 조건이 변경될 명령문을 반드시 포함

 

 

function factorial($num)
{
    if($num > 1)
    	return $num *factorial($num - 1);
    else
    	return 1;
}
echo factorial(4)

 

 

 

 

**100번 이상의 재귀 호출은 스택의 한계에 도달하여 스크립트가 중단될 수 있음.**

 

 

 

 

가변 함수

 

가변 함수란 변수를 사용하여 함수를 호출하는 것

 

PHP에서는 변수 이름에 괄호를 붙이면, 해당 변수의 값과 같은 이름을 가지는 함수를 호출

 

 

 

fucntion first()
{
	echo "first()함수입니다.<br><br>";
}
function second($para)
{
    echo "second()함수입니다.<br>";
    echo "함수 호출 시 전달받은 인수의 값은 {$para}입니다.";
}
$func = "first";
$func(); //first() 함수를 호출함
$func = "second"
$func(20)

 

>>>결과

 

first() 함수입니다.

second() 함수입니다.
전달받은 인수의 값은 20입니다.