What if you could control all property access with just two simple methods instead of dozens?
Why __get and __set for property access in PHP? - Purpose & Use Cases
Imagine you have a PHP class with many private properties. To access or change each property, you write separate getter and setter methods for every single one.
For example, to get or set a user's name, email, and age, you write six methods: getName(), setName(), getEmail(), setEmail(), getAge(), setAge().
This manual approach quickly becomes tiring and error-prone. You have to write a lot of repetitive code, which takes time and can cause mistakes.
Also, if you add new properties later, you must remember to add new getter and setter methods, increasing maintenance work.
The magic methods __get and __set let you handle all property access in one place.
Instead of writing many getters and setters, you write just two methods that automatically respond when you try to get or set any property.
This keeps your code clean, reduces repetition, and makes it easy to add or change properties without extra methods.
public function getName() { return $this->name; }
public function setName($value) { $this->name = $value; }public function __get($property) { return $this->$property; }
public function __set($property, $value) { $this->$property = $value; }You can manage property access dynamically and elegantly, making your classes simpler and easier to maintain.
Think of a user profile class where you want to control access to many private details like name, email, and phone number without writing dozens of methods.
Using __get and __set, you handle all these properties smoothly with just two methods.
Writing separate getters and setters for many properties is repetitive and error-prone.
__get and __set let you handle all property access in one place.
This makes your code cleaner, easier to maintain, and more flexible.
Practice
What is the main purpose of the __get magic method in PHP?
Solution
Step 1: Understand the role of
The__get__getmethod is called when reading a property that is inaccessible or not defined in the object.Step 2: Compare with other options
Options B, C, and D describe different behaviors unrelated to__get. Only To control reading of inaccessible or undefined properties correctly describes its purpose.Final Answer:
To control reading of inaccessible or undefined properties -> Option AQuick Check:
__getreads missing properties = A [OK]
- Confusing __get with __set
- Thinking __get initializes properties
- Assuming __get deletes properties
Which of the following is the correct syntax to define the __set magic method in a PHP class?
class Example {
?
}Solution
Step 1: Recall
The__setmethod signature__setmethod must accept two parameters: the property name and the value to assign.Step 2: Check parameter order and method name
public function __set($name, $value) { /* code */ } correctly uses__set($name, $value). public function __set($value, $name) { /* code */ } reverses parameters, C has no parameters, and D uses wrong method name.Final Answer:
public function __set($name, $value) { /* code */ } -> Option AQuick Check:
__set($name, $value)correct signature = B [OK]
- Swapping parameter order
- Omitting parameters
- Using wrong method name without double underscore
What will be the output of the following PHP code?
class Test {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
public function __get($name) {
return $this->data[$name] ?? 'Not found';
}
}
$obj = new Test();
$obj->color = 'red';
echo $obj->color . ' ' . $obj->size;Solution
Step 1: Understand property setting
Setting$obj->color = 'red'calls__set, storing 'red' in$data['color'].Step 2: Understand property getting
Accessing$obj->colorreturns 'red'. Accessing$obj->sizereturns 'Not found' because$data['size']is not set.Final Answer:
red Not found -> Option BQuick Check:
Defined property returns value, undefined returns 'Not found' = D [OK]
- Expecting undefined property to be empty string
- Ignoring null coalescing operator
- Assuming Notice error on missing array key
Consider this PHP class:
class Sample {
private $props = [];
public function __set($name, $value) {
$this->props[$name] = $value;
}
public function __get($name) {
return $this->props[$name];
}
}
$obj = new Sample();
echo $obj->missing;What error will occur and how to fix it?
Solution
Step 1: Identify error cause
Accessing$obj->missingcalls__get, which returns$this->props['missing']. Since 'missing' key is not set, PHP raises an undefined index notice.Step 2: Fix the error
Modify__getto return$this->props[$name] ?? nullor a default value to avoid notice.Final Answer:
Undefined index notice; fix by using null coalescing in __get -> Option DQuick Check:
Missing key causes notice; use ?? to fix = C [OK]
- Ignoring undefined index notices
- Trying to declare missing properties publicly
- Confusing parse errors with runtime notices
You want to create a PHP class that stores any property set dynamically and logs every property read or write. Which implementation correctly uses __get and __set to achieve this?
class Logger {
private $data = [];
public function __set($name, $value) {
// ???
}
public function __get($name) {
// ???
}
}Solution
Step 1: Understand logging requirements
We must log both property writes and reads, and store values dynamically.Step 2: Check each option's behavior
In __set: store value and echo write log; in __get: echo read log and return value or null stores the value in$dataand echoes a write log in__set, and echoes a read log and returns the stored value or null in__get. This meets all requirements.Final Answer:
In __set: store value and echo write log; in __get: echo read log and return value or null -> Option CQuick Check:
Store and log on read/write = A [OK]
- Logging only on write or only on read
- Not returning value in __get
- Returning value in __set (which should be void)
Ready to prove it?
Pass the test and this pattern moves unknown
