Bird
Raised Fist0
PHPprogramming~5 mins

Closures and variable binding with use in PHP - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a closure in PHP?
A closure is an anonymous function that can capture variables from its surrounding scope, allowing it to use those variables even when called outside that scope.
Click to reveal answer
beginner
How does the use keyword work in PHP closures?
The use keyword lets a closure access variables from the parent scope by copying their values into the closure's scope.
Click to reveal answer
intermediate
What happens if you modify a variable inside a closure without use?
Without use, the closure cannot access or modify variables from the parent scope. Variables inside the closure are local and separate.
Click to reveal answer
intermediate
How can you modify a variable from the parent scope inside a closure?
You can pass the variable by reference using use (&$var). This allows the closure to change the original variable's value.
Click to reveal answer
intermediate
Explain the difference between passing variables by value and by reference in closures.
Passing by value copies the variable's value into the closure, so changes inside don't affect the original. Passing by reference shares the variable, so changes inside the closure update the original variable.
Click to reveal answer
What does the use keyword do in a PHP closure?
ADeclares a global variable inside the closure
BDefines the return type of the closure
CAllows the closure to access variables from the parent scope
DCreates a new variable inside the closure
How do you allow a closure to modify a variable from the parent scope?
ADeclare the variable as global inside the closure
BPass the variable by reference using <code>use (&$var)</code>
CUse <code>global $var</code> outside the closure
DYou cannot modify parent variables inside closures
What happens if you omit use when trying to access a parent variable inside a closure?
AThe variable is treated as a global variable
BThe closure automatically accesses the variable
CThe variable is copied by default
DThe closure cannot access the variable and will cause an error
Which of the following is a correct way to create a closure that uses a variable $x from the parent scope?
Afunction() use ($x) { return $x * 2; }
Bfunction($x) { return $x * 2; }
Cfunction() { return $x * 2; }
Dfunction() global $x { return $x * 2; }
If you want to keep the original variable unchanged, how should you pass it to a closure?
APass it by value using <code>use ($var)</code>
BPass it by reference using <code>use (&$var)</code>
CDeclare it as global inside the closure
DYou cannot keep it unchanged
Explain how the use keyword works with closures in PHP and why it is needed.
Think about how closures get variables from outside their own function.
You got /5 concepts.
    Describe the difference between passing variables by value and by reference in PHP closures and give an example of when to use each.
    Consider if you want the closure to change the original variable or not.
    You got /5 concepts.

      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