Bird
Raised Fist0
PHPprogramming~10 mins

Closures and variable binding with use in PHP - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a closure that uses the variable $x.

PHP
<?php
$x = 5;
$func = function() use ([1]) {
    return $x * 2;
};
echo $func();
?>
Drag options to blanks, or click blank then click option'
A$x
B$y
C$z
D$a
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name not defined outside the closure.
Forgetting to use the use keyword.
2fill in blank
medium

Complete the code to modify the external variable $count inside the closure.

PHP
<?php
$count = 0;
$increment = function() use (&[1]) {
    $count++;
};
$increment();
echo $count;
?>
Drag options to blanks, or click blank then click option'
A$value
B$count
C$num
D$total
Attempts:
3 left
💡 Hint
Common Mistakes
Not using & to pass by reference.
Using a different variable name inside use.
3fill in blank
hard

Fix the error in the closure by correctly importing the variable $name.

PHP
<?php
$name = "Alice";
$greet = function() use ([1]) {
    return "Hello, " . $name;
};
echo $greet();
?>
Drag options to blanks, or click blank then click option'
A$this->name
B$_name
C$name
D$greet
Attempts:
3 left
💡 Hint
Common Mistakes
Trying to access external variables directly inside the closure.
Using incorrect variable names.
4fill in blank
hard

Fill both blanks to create a closure that captures $a and $b by value and returns their sum.

PHP
<?php
$a = 3;
$b = 4;
$sum = function() use ([1], [2]) {
    return [1] + [2];
};
echo $sum();
?>
Drag options to blanks, or click blank then click option'
A$a
B$b
C$c
D$d
Attempts:
3 left
💡 Hint
Common Mistakes
Using variables not defined outside the closure.
Not importing variables with use.
5fill in blank
hard

Fill all three blanks to create a closure that captures $x by reference, increments it, and returns the new value.

PHP
<?php
$x = 10;
$increment = function() use ([1]) {
    [2]++;
    return [3];
};
echo $increment();
?>
Drag options to blanks, or click blank then click option'
A&$x
B$x
D$y
Attempts:
3 left
💡 Hint
Common Mistakes
Not using reference in use.
Using different variable names inside the closure.

Practice

(1/5)
1. What does the use keyword do in a PHP closure?
easy
A. It defines a new variable inside the closure.
B. It creates a global variable accessible everywhere.
C. It imports variables from the parent scope into the closure.
D. It calls the closure immediately.

Solution

  1. Step 1: Understand closure scope

    A closure is a function inside another function that can access variables from the outside only if explicitly told.
  2. Step 2: Role of use

    The use keyword brings variables from the parent scope into the closure's scope so the closure can use them.
  3. Final Answer:

    It imports variables from the parent scope into the closure. -> Option C
  4. Quick Check:

    use = import variables [OK]
Hint: Remember: use imports outside variables into closure [OK]
Common Mistakes:
  • Thinking use creates new variables inside closure
  • Confusing use with global keyword
  • Assuming use calls the closure
2. Which of the following is the correct syntax to pass a variable $x by reference into a closure using use?
easy
A. function() use ($x) { }
B. function() use (&x) { }
C. function() use ($&x) { }
D. function() use (&$x) { }

Solution

  1. Step 1: Understand passing by reference

    To allow a closure to modify an outside variable, it must be passed by reference using &.
  2. Step 2: Correct syntax with use

    The correct syntax is use (&$x) where & is before the variable name with the dollar sign.
  3. Final Answer:

    function() use (&$x) { } -> Option D
  4. Quick Check:

    Reference = & before $variable [OK]
Hint: Use & before $var inside use to pass by reference [OK]
Common Mistakes:
  • Placing & after $ or before variable name without $
  • Omitting & when intending to modify variable
  • Using invalid syntax like $&x
3. What will be the output of this PHP code?
$count = 0;
$func = function() use (&$count) { $count++; echo $count; };
$func();
$func();
echo $count;
medium
A. 111
B. 122
C. 120
D. Error

Solution

  1. Step 1: Analyze closure calls and reference

    The closure uses &$count by reference, so changes inside affect the outside variable.
  2. Step 2: Trace each call and output

    First call: increments count to 1 and echoes '1'. Second call: increments count to 2 and echoes '2'. Finally, outside echo prints 2.
  3. Final Answer:

    122 -> Option B
  4. Quick Check:

    Reference increments count = 122 [OK]
Hint: Reference in use means closure changes outside variable [OK]
Common Mistakes:
  • Assuming closure copies variable, so count stays 0
  • Expecting output '111' by mistake
  • Thinking code causes error
4. Identify the error in this PHP code snippet:
$x = 5;
$func = function() use ($x) { $x++; echo $x; };
$func();
echo $x;
medium
A. Output will be '65' because $x inside closure is a copy.
B. Runtime error because $x is undefined inside closure.
C. Syntax error because $x is not passed by reference.
D. Output will be '55' because closure does not run.

Solution

  1. Step 1: Understand variable binding without reference

    Using use ($x) passes $x by value, so closure gets a copy.
  2. Step 2: Trace output of closure and outside variable

    Closure increments its copy to 6 and echoes it. Outside $x remains 5, so echo prints 5.
  3. Final Answer:

    Output will be '65' because $x inside closure is a copy. -> Option A
  4. Quick Check:

    Value copy in use means outside unchanged [OK]
Hint: Without &, closure changes copy, not original variable [OK]
Common Mistakes:
  • Expecting outside $x to change without &
  • Thinking code causes syntax or runtime error
  • Confusing output order
5. Given this code, what will be the output?
$values = [1, 2, 3];
$sum = 0;
$funcs = [];
foreach ($values as $v) {
$funcs[] = function() use (&$sum, $v) { $sum += $v; };
}
foreach ($funcs as $f) { $f(); }
echo $sum;

Why does this output occur?
hard
A. 6, because each closure adds its own $v to $sum by value and $sum is by reference.
B. 3, because $v is shared and only last value is added multiple times.
C. 0, because closures do not run correctly.
D. Error, because $v cannot be used without reference.

Solution

  1. Step 1: Understand variable binding in loop closures

    Each closure captures $v by value (copy) and $sum by reference.
  2. Step 2: Trace closure execution

    Each closure adds its own $v (1, 2, 3) to the shared $sum. After all run, $sum = 6.
  3. Final Answer:

    6, because each closure adds its own $v to $sum by value and $sum is by reference. -> Option A
  4. Quick Check:

    Value copy for $v + reference $sum = 6 [OK]
Hint: Use value for loop var, reference for accumulator [OK]
Common Mistakes:
  • Assuming $v is shared reference causing wrong sum
  • Expecting error due to $v usage
  • Thinking closures do not run
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard