PHP Static Methods
Calling methods without creating objects
⚡ What are Static Methods?
Static methods belong to the class itself rather than to any specific object. You can call them without creating an instance of the class, making them perfect for utility functions.
<?php
// Simple static method example
class Math {
public static function add($a, $b) {
return $a + $b;
}
}
// Call without creating object
echo Math::add(5, 3); // 8
?>
Why Use Static Methods?
No Object Needed
Call methods without instantiation
Utility Functions
Perfect for helper and utility methods
Memory Efficient
Shared across all instances
Organized Code
Group related functions together
🔹 Basic Static Method
Static methods are declared using the static keyword and called using the double colon (::) operator, also known as the scope resolution operator.
<?php
class Calculator {
public static function multiply($a, $b) {
return $a * $b;
}
public static function divide($a, $b) {
if ($b == 0) {
return "Cannot divide by zero";
}
return $a / $b;
}
}
// Call static methods
echo Calculator::multiply(4, 5) . "<br>";
echo Calculator::divide(10, 2);
?>
Output:
20
5
🔹 Static vs Non-Static Methods
Understanding the difference between static and non-static methods helps you choose the right approach for your code. Static methods cannot access instance properties.
<?php
class Counter {
public $count = 0; // Instance property
public static $totalCalls = 0; // Static property
// Non-static method
public function increment() {
$this->count++;
self::$totalCalls++;
return $this->count;
}
// Static method
public static function getTotalCalls() {
return self::$totalCalls;
}
}
$counter1 = new Counter();
$counter1->increment();
$counter1->increment();
$counter2 = new Counter();
$counter2->increment();
echo "Counter1: " . $counter1->count . "<br>";
echo "Counter2: " . $counter2->count . "<br>";
echo "Total calls: " . Counter::getTotalCalls();
?>
Output:
Counter1: 2
Counter2: 1
Total calls: 3
🔹 Accessing Static Methods
Static methods can be called from outside the class using the class name, or from inside the class using self, static, or parent keywords.
<?php
class StringHelper {
public static function uppercase($text) {
return strtoupper($text);
}
public static function lowercase($text) {
return strtolower($text);
}
public static function capitalize($text) {
// Calling another static method
$lower = self::lowercase($text);
return ucfirst($lower);
}
}
echo StringHelper::uppercase("hello") . "<br>";
echo StringHelper::lowercase("WORLD") . "<br>";
echo StringHelper::capitalize("jOHN DOE");
?>
Output:
HELLO
world
John doe
🔹 Static Methods in Inheritance
Child classes can override static methods from parent classes. Use parent:: to call the parent's static method from a child class.
<?php
class Animal {
public static function makeSound() {
return "Some sound";
}
public static function describe() {
return "I am an animal and I say: " . self::makeSound();
}
}
class Dog extends Animal {
public static function makeSound() {
return "Woof!";
}
public static function parentSound() {
return parent::makeSound();
}
}
echo Animal::describe() . "<br>";
echo Dog::makeSound() . "<br>";
echo Dog::parentSound();
?>
Output:
I am an animal and I say: Some sound
Woof!
Some sound
🔹 Late Static Binding
Use the static keyword instead of self to enable late static binding, which resolves the called class at runtime rather than compile time.
<?php
class Base {
public static function who() {
return "Base";
}
public static function testSelf() {
return self::who();
}
public static function testStatic() {
return static::who();
}
}
class Child extends Base {
public static function who() {
return "Child";
}
}
echo "Using self: " . Child::testSelf() . "<br>";
echo "Using static: " . Child::testStatic();
?>
Output:
Using self: Base
Using static: Child
🔹 Practical Example: Validation Class
Static methods are perfect for utility classes that provide helper functions without needing to maintain state between calls.
<?php
class Validator {
public static function isEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
public static function isUrl($url) {
return filter_var($url, FILTER_VALIDATE_URL) !== false;
}
public static function minLength($text, $min) {
return strlen($text) >= $min;
}
}
$email = "[email protected]";
$url = "https://example.com";
$password = "pass123";
echo "Email valid: " . (Validator::isEmail($email) ? "Yes" : "No") . "<br>";
echo "URL valid: " . (Validator::isUrl($url) ? "Yes" : "No") . "<br>";
echo "Password length OK: " . (Validator::minLength($password, 6) ? "Yes" : "No");
?>
Output:
Email valid: Yes
URL valid: Yes
Password length OK: Yes
🔹 When to Use Static Methods
✅ Good Use Cases:
- Utility and helper functions
- Factory methods that create objects
- Functions that don't need object state
- Mathematical operations
- Validation functions
- Configuration or constant access
❌ Avoid Static Methods When:
- You need to access instance properties
- The method depends on object state
- You need polymorphism with interfaces
- Testing and mocking is important
💡 Key Points to Remember:
- Static methods belong to the class, not instances
-
Call static methods using
::operator -
Use
self::to call static methods within the class -
Use
static::for late static binding -
Static methods cannot access
$this - Static methods can only access static properties
- Perfect for utility and helper functions