Why global state is dangerous in PHP - Performance Analysis
When using global state in PHP, it's important to see how it affects the program's behavior as it grows.
We want to understand how accessing and changing global variables impacts the program's speed and complexity.
Analyze the time complexity of the following code snippet.
<?php
$globalArray = [];
function addItem($item) {
global $globalArray;
$globalArray[] = $item;
}
for ($i = 0; $i < $n; $i++) {
addItem($i);
}
This code adds items to a global array inside a loop.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding an item to the global array inside the loop.
- How many times: The loop runs
ntimes, so the add operation repeatsntimes.
Each new item is added one by one, so the total work grows as we add more items.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions to the global array |
| 100 | 100 additions to the global array |
| 1000 | 1000 additions to the global array |
Pattern observation: The number of operations grows directly with the input size.
Time Complexity: O(n)
This means the time to complete the task grows in a straight line as the input size increases.
[X] Wrong: "Using global variables makes the code faster because data is always available."
[OK] Correct: Accessing and modifying global state can cause hidden delays and bugs, especially as the program grows, making it harder to predict performance.
Understanding how global state affects program growth helps you write clearer, more predictable code, a skill valued in many coding challenges and real projects.
"What if we replaced the global array with a local array passed as a function argument? How would the time complexity change?"
Practice
Solution
Step 1: Understand what global variables do
Global variables can be accessed and modified from any part of the program.Step 2: Identify the risk of global variables
Since they can be changed anywhere, it is easy to accidentally overwrite or misuse them, leading to bugs that are hard to find.Final Answer:
Because they can be changed anywhere, causing unexpected bugs -> Option AQuick Check:
Global variables cause unexpected bugs [OK]
- Thinking global variables improve performance
- Believing global variables prevent function use
- Assuming global variables encrypt data automatically
Solution
Step 1: Recall PHP syntax for accessing global variables
In PHP, to access a global variable inside a function, you must declare it with theglobalkeyword.Step 2: Understand why other options are incorrect
Declaring the variable again inside the function creates a new local variable.statickeeps value between calls but does not access global.constdefines constants, not variables.Final Answer:
Use theglobalkeyword inside the function -> Option BQuick Check:
Access global variable in function = global keyword [OK]
- Redeclaring variable inside function thinking it accesses global
- Using static or const keywords incorrectly
- Forgetting to declare global keyword inside function
$count = 5;
function increment() {
global $count;
$count++;
}
increment();
echo $count;
Solution
Step 1: Understand the global keyword usage
The function declaresglobal $count;which means it uses the global variable$countdefined outside.Step 2: Trace the code execution
The global$countstarts at 5, the function increments it by 1, so$countbecomes 6. Thenecho $count;prints 6.Final Answer:
6 -> Option DQuick Check:
Global increment changes $count to 6 [OK]
- Thinking $count inside function is local without global keyword
- Expecting output 5 because of misunderstanding scope
- Assuming code causes error due to variable scope
$value = 10;
function changeValue() {
$value = 20;
}
changeValue();
echo $value;
Solution
Step 1: Analyze variable scope in the function
Inside the function,$value = 20;creates a new local variable, not affecting the global$value.Step 2: Understand why global keyword is needed
Without declaringglobal $value;inside the function, the global variable remains unchanged.Final Answer:
The function does not change the global variable because it lacks the global keyword -> Option CQuick Check:
Missing global keyword means global variable unchanged [OK]
- Assuming function changes global variable without global keyword
- Expecting syntax error when none occurs
- Thinking $value is undefined outside function
$config to store settings. Why is this approach risky, and what is a better alternative?Solution
Step 1: Understand risks of global variables for configuration
Global$configcan be modified anywhere, leading to unexpected changes and bugs.Step 2: Identify better practice
Passing$configexplicitly as a function parameter keeps control clear and avoids accidental changes.Final Answer:
Global$configcan be changed anywhere causing bugs; better to pass it as a function parameter -> Option AQuick Check:
Pass config as parameter to avoid global bugs [OK]
- Believing global variables improve speed or security
- Thinking global constants solve all global state issues
- Ignoring risks of accidental global variable changes
Ready to prove it?
Pass the test and this pattern moves unknown
