함수는 모든 개발 언어에서 함수는 아주 중요한 역할을 하고 있습니다.
특히나 OOP (객체 지향 프로그래밍) 에 대한 개념도 중요한데요.
이는 PHP 뿐만 아니라 C#, JAVA, 파이썬 등
객체지향을 사용하는 범위가 아주 넓기 때문입니다.
그만큼 잘 배워두면 많은 곳에서 사용할 수도 있기도 하고, 은근 다 비슷합니다. 이론들이
안정적인 기술인 거죠. 한번 배워두면 사용할 곳들이 많습니다.
물을 넣지 않은 주전자입니다.
그냥 존재만 하고 있습니다.
function 함수명() {}
이번엔 어때보이시나요? 주전자에 불을 내뿜는 기능을 만들었습니다.
그렇습니다. input 은 없지만 output 이 있죠. 무에서 유를 창출하고 있습니다.
function 함수명() {
echo "함수내용";
}
위와 같이 간단하게 함수(function)를 설정하여 사용할 수 있습니다.
이번엔 물을 넣어보겠습니다. 아름답군요.
이게 함수입니다. input 이 있지만 output 은 없는 함수도 만들 수 있습니다.
function 함수명 ($매개변수1, $매개변수2){
echo $매개변수1 + $매개변수2;
}
매개변수를 설정하면 내부에서도 사용할 수 있게 됩니다
$함수결과 = 함수명(1,2);
function 함수명 ($매개변수1, $매개변수2){
return $매개변수1 + $매개변수2;
}
위와 같이 함수 값을 리턴시킬 수도 있습니다.
function 함수명 (매개변수1, 매개변수2) : float
{
return $매개변수1 + $매개변수2;
}
함수에 타입을 설정할 수도 있습니다.
int
float
string
bool
array
object
<?php
class C {}
function getC(): C {
return new C;
}
var_dump(getC());
?>
// 출력
// object(C)#1 (0) {
// }
클래스를 기준으로 함수에 적용할 수도 있습니다.
gettype( 함수명(1,2) );
declare(strect_types = 1); // strict 모드 활성화
function sum($x, $y) : float // 반환값 타입 float 설정
{
return $x + $y
}
var_dump(sum(1 + 2)); // 에러
var_dump(sum(1 + 1.5)); // 2.5 반환
float 타입으로 설정하면 소수점만 저장할 수 있습니다.
strict 모드를 활성화 하면 느슨한 PHP 환경에 긴장감을 줄 수 있게 됩니다.
while 문과 같은 반복문에서 함수를 정의하면 적용되지 않을 수 있습니다
function test($value) {
if(!$value) { return; }
echo $value;
}
함수를 중단 시켜야 하는 상황이 한드시 존재합니다.
이 때는 return; 구문을 활용하여 중간에 멈출 수 있는데요,
위와 같이 조건에 해당되지 않으면 return 을추가하여 문제를 해결하는 것이 좋습니다.
함수 정의는 맨 끝에 두어도 정상적으로 실행됩니다. PHP 인터프리터가 함수를 정의할 때 이미 함수 호출 코드를 찾아보기 때문입니다
<?php
$message = "안녕하세요!";
$greeting = function() use ($message) {
echo $message;
};
$greeting(); // 출력: 안녕하세요!
?>
함수 파라미터 뒤의 use 를 붙이는 경우가 존재합니다.
이는 익명 함수에서 클로저를 사용하기 위함입니다.
위의 코드는 클로저 내부에서 외부의 $message 변수를 사용할 수 있게 합니다.
PHP 함수는 외부 변수와 소통할 방법이 global와 파라미터밖에 없습니다.
이를 해결하기 위해 use(외부변수명) 으로 함수가 외부 스코프를 명시적으로 참고할 수 있게 합니다.