PHPμμ μ΅λͺ ν¨μλ μ΄λ¦μ΄ μλ ν¨μλ‘, λ³μμ ν λΉνκ±°λ λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬ν μ μλ νΉλ³ν ννμ ν¨μλ€. νΉν βuseβ ν€μλλ μ΅λͺ ν¨μμμ λ§€μ° μ€μν μν μ νλλ°, μ΄μ λν΄ μμΈν μμ보λλ‘ νλ€.
μ΅λͺ ν¨μλ?
μ΅λͺ ν¨μλ ν¨μμ μ΄λ¦ μμ΄ μ μλλ ν¨μλ‘, ν΄λ‘μ (Closure)λΌκ³ λ λΆλ¦°λ€. μ£Όλ‘ μ½λ°±μΌλ‘ μ¬μ©λκ±°λ λ³μμ μ μ₯λΌ λμ€μ μ€νν μ μλ€.
κΈ°λ³Έ λ¬Έλ²
$ν¨μλͺ
= function(λ§€κ°λ³μ) use (μΈλΆλ³μ) {
// ν¨μ λ΄μ©
};λμ λ°©μ
flowchart LR A[ν΄λμ€ μ μ] --> B[κ°μ²΄ μμ±] B --> C[λ©λͺ¨λ¦¬ μ μ¬] C --> D[μ¦μ μ¬μ©] D --> E[μλ©Έ]
use ν€μλκ° νμν μ΄μ
1. μ€μ½ν λ¬Έμ
PHPμ μ΅λͺ ν¨μλ κΈ°λ³Έμ μΌλ‘ μΈλΆ λ³μμ μ κ·Όν μ μλ€. μ΄λ λ³μ μ€μ½νμ μ ν λλ¬Έμ΄λ€.
$message = "μλ
νμΈμ";
// μ€λ₯ λ°μ
$greet = function() {
echo $message; // Undefined variable $message
};
// μ μ λμ
$greet = function() use ($message) {
echo $message; // "μλ
νμΈμ" μΆλ ₯
};2. λ³μ μΊ‘μ²
use ν€μλλ μΈλΆ μ€μ½νμ λ³μλ₯Ό ν¨μ λ΄λΆλ‘ κ°μ Έμ€λ μν μ νλ€.
$multiplier = 3;
$numbers = [1, 2, 3, 4, 5];
$result = array_map(function($n) use ($multiplier) {
return $n * $multiplier;
}, $numbers);
// κ²°κ³Ό: [3, 6, 9, 12, 15]use ν€μλ μ¬μ© λ°©λ²
1. μ¬λ¬ λ³μ μΊ‘μ²νκΈ°
$firstName = "κΈΈλ";
$lastName = "ν";
$fullName = function() use ($firstName, $lastName) {
return $lastName . $firstName;
};2. μ°Έμ‘°λ‘ λ³μ μΊ‘μ²νκΈ°
$counter = 0;
$increment = function() use (&$counter) {
$counter++;
};
$increment(); // $counterλ 1μ΄ λλ€
$increment(); // $counterλ 2κ° λλ€μ£Όμ νΉμ§
1. κ° λ³΅μ¬
useλ‘ μΊ‘μ²ν λ³μλ κΈ°λ³Έμ μΌλ‘ κ°μ΄ 볡μ¬λλ€.
$message = "μλ³Έ";
$printer = function() use ($message) {
echo $message;
};
$message = "λ³κ²½λ¨";
$printer(); // "μλ³Έ" μΆλ ₯2. μ°Έμ‘° μ λ¬
μ°Έμ‘°λ‘ μ λ¬νλ©΄ μλ³Έ λ³μμ λ³κ²½μ¬νμ΄ λ°μλλ€.
$message = "μλ³Έ";
$printer = function() use (&$message) {
echo $message;
};
$message = "λ³κ²½λ¨";
$printer(); // "λ³κ²½λ¨" μΆλ ₯μ€μ μ¬μ© μμ
1. μ΄λ²€νΈ νΈλ€λ¬
$config = ['debug' => true];
$errorHandler = function($error) use ($config) {
if ($config['debug']) {
echo "μ€λ₯ λ°μ: " . $error;
}
};2. λ°μ΄ν° νν°λ§
$allowedTypes = ['jpg', 'png', 'gif'];
$fileFilter = function($file) use ($allowedTypes) {
return in_array($file['extension'], $allowedTypes);
};μ£Όμμ¬ν
- use ν€μλλ ν¨μ μ μ μμ μ λ³μ κ°μ μΊ‘μ²νλ€
- λ무 λ§μ λ³μλ₯Ό μΊ‘μ²νλ©΄ μ½λμ 볡μ‘λκ° μ¦κ°νλ€
- μ°Έμ‘° μ λ¬μ μ μ€νκ² μ¬μ©ν΄μΌ νλ€
use ν€μλμ μ₯μ
- μΈλΆ λ³μλ₯Ό λͺ μμ μΌλ‘ μ μΈν΄ μ½λμ κ°λ μ±μ΄ ν₯μλλ€
- λ³μμ μ€μ½νλ₯Ό λͺ ννκ² μ μ΄ν μ μλ€
- ν΄λ‘μ μ λμμ μμΈ‘ κ°λ₯νκ² λ§λ λ€
κ²°λ‘
μ΅λͺ ν¨μμμ use ν€μλλ μΈλΆ λ³μμ μ κ·ΌνκΈ° μν νμμ μΈ μμλ€. μ΄λ₯Ό ν΅ν΄ ν΄λ‘μ μ λμμ λ μ μ μ΄ν μ μμΌλ©°, μ½λμ μμ μ±κ³Ό κ°λ μ±μ λμΌ μ μλ€. λ€λ§, κ³Όλν μ¬μ©μ μ½λμ 볡μ‘μ±μ μ¦κ°μν¬ μ μμΌλ―λ‘ μ μ ν μν©μμλ§ μ¬μ©νλ κ²μ΄ μ’λ€. νΉν μ°Έμ‘° μ λ¬μ μ¬μ©ν λλ side effectλ₯Ό κ³ λ €ν΄ μ μ€νκ² κ²°μ ν΄μΌ νλ€.