First-class callable syntax in PHP - Time & Space Complexity
We want to understand how using first-class callable syntax affects the time it takes to run PHP code.
Specifically, how does calling a function this way change the number of steps the program takes?
Analyze the time complexity of the following code snippet.
function square(int $n): int {
return $n * $n;
}
$numbers = range(1, 1000);
// Using first-class callable syntax
$squares = array_map(square(...), $numbers);
This code squares each number in an array using first-class callable syntax with array_map.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Applying the
squarefunction to each element in the array. - How many times: Once for each element in the
$numbersarray (1000 times in this example).
As the number of elements grows, the number of times the function runs grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 function calls |
| 100 | 100 function calls |
| 1000 | 1000 function calls |
Pattern observation: The work grows directly with the number of items; doubling items doubles work.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the number of items you process.
[X] Wrong: "Using first-class callable syntax makes the function run faster or slower than a normal call."
[OK] Correct: The syntax is just a cleaner way to pass the function; the number of calls and work done stays the same.
Understanding how function calls scale helps you explain code efficiency clearly and confidently in interviews.
"What if we replaced array_map with a loop that calls the function manually? How would the time complexity change?"
Practice
Solution
Step 1: Understand the concept of first-class callables
First-class callable syntax lets you treat functions like variables, so you can pass or store them.Step 2: Compare options with this concept
Only 'Treat functions as variables to pass or store them easily' correctly describes this ability; others describe unrelated features.Final Answer:
Treat functions as variables to pass or store them easily -> Option DQuick Check:
First-class callable = Treat functions as variables [OK]
- Confusing callable syntax with dynamic function creation
- Thinking it converts functions to strings
- Assuming it restricts function calls
foo in PHP?Solution
Step 1: Recall the first-class callable syntax
In PHP, to get a callable for a function, you usefunction_name(...).Step 2: Match the syntax with options
$callable = foo(...); usesfoo(...), which is correct. $callable = foo(); calls the function. foo\(...) uses backslash incorrectly causing syntax error. $callable = foo; treats name as constant.Final Answer:
$callable = foo(...); -> Option AQuick Check:
Callable syntax = function_name(...) [OK]
- Calling the function instead of getting callable
- Omitting parentheses and ellipsis
- Using backslash incorrectly for global functions
$fn = strlen(...);
echo $fn('hello');Solution
Step 1: Understand the callable assignment
The variable$fnis assigned the callable for the built-in functionstrlenusing first-class callable syntax.Step 2: Call the callable with argument 'hello'
Calling$fn('hello')executesstrlen('hello'), which returns 5.Final Answer:
5 -> Option AQuick Check:
strlen('hello') = 5 [OK]
- Expecting the function name as output
- Confusing callable with string
- Thinking it causes an error
function greet($name) {
return "Hello, $name!";
}
$greet = greet;
echo $greet('World');
Solution
Step 1: Check how callable is assigned
The code assigns$greet = greet;which is invalid syntax for first-class callable.Step 2: Correct syntax requires parentheses and ellipsis
To get a callable, it should be$greet = greet(...);. Without this, PHP treats it as a constant or causes error.Final Answer:
Missing parentheses and ellipsis to get callable -> Option BQuick Check:
Callable syntax needs (...) [OK]
- Assigning function name without parentheses
- Assuming function name alone is callable
- Ignoring syntax errors
function multiply($a, $b) {
return $a * $b;
}
$operations = [
'double' => multiply(...),
'square' => fn($x) => multiply($x, $x),
];
echo $operations['double'](5, 2) . ', ' . $operations['square'](4);
Solution
Step 1: Understand the callable assignments
The array$operationsstores two callables: 'double' uses first-class callablemultiply(...), 'square' uses an arrow function calling multiply.Step 2: Evaluate each callable call
$operations['double'](5, 2)calls multiply(5, 2) = 10.$operations['square'](4)calls multiply(4, 4) = 16.Final Answer:
10, 16 -> Option CQuick Check:
multiply(5,2)=10 and multiply(4,4)=16 [OK]
- Confusing arrow function with callable syntax
- Expecting error from multiply(...) usage
- Mixing up multiply arguments
Ready to prove it?
Pass the test and this pattern moves unknown
