일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- php
- file upload
- overthewire
- active reconnaissance
- php To Do List
- Authentication
- Server Side Request Forgery
- privilege escalation
- php 로그인 페이지 만들기
- access control
- FTZ
- Leviathan
- sql injection
- active recon
- tryhackme
- ssrf
- SQLi
- Cryptography
- BANDiT
- 파일 업로드 취약점
- Cookie
- Recon
- Reconnaissance
- War Game
- php login page
- OS Command Injection
- over the wire
- THM
- php 파일 업로드하기
- php file upload
- Today
- Total
R's Hacking Daily Log
php 함수 (3) 본문
Step 1 :: 익명 함수
지금까지 살펴본 함수는 함수 이름을 기준으로 정의와 호출이 이루어졌다.
하지만 이름이 없는 함수도 존재하는 데 이를 익명 함수(람다 함수)라고 부른다.
익명 함수는 보통 함수처럼 정의해 놓고 반복해서 사용하는 용도가 아닌
필요할 때 즉시 생성하여 일회용으로 사용하는 함수이다.
익명 함수의 구조는 다음과 같다.
<?php
$VARIABLE = function() {
#실행한 코드
};
fucntion keyword와 괄호 사이에 함수명이 없는 게 포인트이다.
익명 함수를 사용하는 형태는 크게 두 가지가 있는 데
(1) 하나는 위와 같은 function() {} 구조이고
(2) 다른 하나는 fn keyword를 이용한 화살표 함수이다.
(1)의 경우로 먼저 살펴보면
"매개 변수 값을 반환하는 함수"를 변수에 할당하여 그 변수로 함수를 호출하고 있다.
(2)의 경우로 보자면 코드가 조금 더 간단해진다.
fn keyword로 화살표 함수를 정의했는 데 fn과 function keyword의 차이점은 코드에서도 느낄 수 있듯이
코드의 간략화이다.
화살표 함수를 사용하는 이유가 익명 함수를 좀 더 간략하게 표현하고자 하는 것이기 때문에
fn으로 정의한 화살표 함수는 단 일행으로만 사용된다. (한 줄로)
Step 2 :: 익명 함수 활용하기
step1에서 익명 함수에 대해 알아보았으니 이번에는 활용 형태에 대해 살펴보도록 하자!
(1) 익명 함수 - 인수로 사용하기
코드를 보면 function keyword로 정의된 say 함수가 $lambda 매개변수를 출력한다는 걸 알 수 있다.
여기서 눈 여겨봐야 할 건 say()를 호출하면서 전달한 인수 값이다.
맨 마지막 줄에서 함수를 호출하면서 인수로 익명 함수를 전달하고 있다.
이 부분에서 실행되는 바는 아래와 같다.
# say 함수 호출하면서 인수로 익명 함수 전달
1. say(function() {return "hello world";});
# 매개 변수는 인수를 받음
2. $lambda = function() { return "hello world"; }
# 함수 내에서 매개 변수 사용 - $lambda가 받은 익명함수 사용하기
3. echo $lambda();
(2) 익명 함수 - return 값으로 사용하기
이번에는 함수 say()에서 익명 함수를 반환하고 있다.
6번째 줄에서 say()의 결과를 변수 lambda에 할당하고 변수를 사용해 익명 함수를 실행시키는 구조이다.
여기서 말하는 say()의 결과가 익명 함수인 것!
사실 이 코드는 함수를 사용할 필요 없이
$lambda = function () {return "Hello World";};
echo lambda();
이와 같은 형태지만 함수의 return 값으로 익명 함수가 쓰일 수 있다고 보여주기 위한 용도라 생각하면 된다.
(3) closer
closer는 익명 함수를 사용한 변수의 객체를 의미한다.
위에서 살펴봤던 $lambda와 같은 변수를 Closer라 생각하면 된다.
Closer를 생성할 때 주의할 점은
익명 함수를 통해 생성된 Closer는 외부 변수 값에 영향을 주지 않는다는 점이다.
위의 코드에서 변수 fn은 fn keyword를 통해 익명 함수(화살표 함수)를 할당받은 closer이다.
이때 익명 함수의 기능을 보면 변수 x의 값을 1 증가시키는 것인데
문제는 변수 x가 익명 함수 기준으로 외부 변수이기 때문에 x 값을 조정할 수 없다는 거다.
따라서 $fn()으로 함수로 호출되었지만 변수 x의 값이 2가 아닌 1인 상태인 걸 확인할 수 있다.
만약 익명 함수에서 외부 변수를 사용하고자 한다면 앞에서 살펴봤던 전역 변수 개념을 활용하면 된다.
global keyword로 외부 변수를 전역 변수로 선언해 주면 함수 내에서도 사용이 가능해진다.
전역 변수 $sep을 함수 내부에서 사용하기 위해 global keyword를 사용했다.
또한 익명 함수를 return 하고자 하는 데 이때!
익명 함수의 매개 변수 hel 뿐만 아니라 myfunc() 내에 변수 sep & wor도 사용하고자 한다.
이럴 경우에는 use keyword를 사용할 수 있다. 화살표 함수가 조금 다른 점이 있다면
화살표 함수는 같은 범위에 있는 변수를 사용하기 위해 use keyword를 쓸 필요가 없다는 것이다.
'PHP' 카테고리의 다른 글
php 객체 지향 프로그램 (2) (0) | 2023.07.12 |
---|---|
php 객체 지향 프로그램 (1) (0) | 2023.07.10 |
php 함수 (2) (0) | 2023.07.05 |
php 함수 (1) (0) | 2023.07.05 |
php 반복문 다루기 (0) | 2023.07.04 |