Encapsulation is a core concept of object-oriented programming, which helps improve code maintainability and reusability. In PHP, encapsulation can be achieved using access control, Getter/Setter methods, magic methods, and wrapper classes.
PHP provides three access modifiers to control the visibility of class members:
public: accessible anywhere
protected: accessible only within the class and its subclasses
private: accessible only within the class itself
class MyClass {
public $publicVar;
protected $protectedVar;
private $privateVar;
public function publicMethod() {
// Accessible anywhere
}
protected function protectedMethod() {
// Accessible only within the class and subclasses
}
private function privateMethod() {
// Accessible only within the class
}
}To control access to member variables more precisely, we can use Getter and Setter methods. Getter methods retrieve the value of a member variable, while Setter methods set the value, allowing validation or processing during assignment.
class MyClass {
private $name;
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
}PHP provides special magic methods for object creation, destruction, and property access. The __get and __set methods allow encapsulation when accessing non-existent or inaccessible member variables.
class MyClass {
private $data = [];
public function __get($name) {
if (isset($this->data[$name])) {
return $this->data[$name];
} else {
throw new Exception("Property '$name' does not exist.");
}
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}Wrapper classes can encapsulate one or more underlying classes, providing a higher-level interface, hiding implementation details, and making the code easier to use.
class Database {
public function connect() {
// Connect to database
}
public function query($sql) {
// Execute query
}
public function close() {
// Close database connection
}
}
class DatabaseWrapper {
private $database;
public function __construct(Database $database) {
$this->database = $database;
}
public function fetchData($sql) {
$this->database->connect();
$result = $this->database->query($sql);
$this->database->close();
return $result;
}
}Implementing encapsulation in PHP primarily relies on access control, Getter and Setter methods, magic methods, and wrapper classes. These techniques effectively limit access to internal object details while providing simple and user-friendly interfaces, enhancing code maintainability, reusability, and development efficiency.