Access Modifiers কী?
Access modifier দিয়ে class-এর property ও method-এর দৃশ্যমানতা (visibility) নিয়ন্ত্রণ করা হয়। এটি Encapsulation এর মূল ভিত্তি।
তিনটি Access Modifier
| Modifier | একই Class | Child Class | বাইরে থেকে |
|---|---|---|---|
| public | ✅ | ✅ | ✅ |
| protected | ✅ | ✅ | ❌ |
| private | ✅ | ❌ | ❌ |
উদাহরণ
class BankAccount {
public $accountHolder; // সবার জন্য দৃশ্যমান
protected $accountNumber; // শুধু class ও child-এ
private $balance = 0; // শুধু এই class-এ
public function __construct($name, $accNo) {
$this->accountHolder = $name;
$this->accountNumber = $accNo;
}
public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
echo "{$amount} জমা হলো\n";
}
}
public function withdraw($amount) {
if ($amount <= $this->balance) {
$this->balance -= $amount;
echo "{$amount} উত্তোলন হলো\n";
} else {
echo "পর্যাপ্ত ব্যালেন্স নেই\n";
}
}
public function getBalance() {
return $this->balance;
}
}
$acc = new BankAccount("করিম", "AC-1001");
echo $acc->accountHolder; // ✅ "করিম"
echo $acc->balance; // ❌ Fatal error (private)
$acc->balance = 99999999; // ❌ Fatal error
echo $acc->getBalance(); // ✅ 0
$acc->deposit(5000);
echo $acc->getBalance(); // ✅ 5000
কেন Encapsulation গুরুত্বপূর্ণ?
- ডেটা সুরক্ষা — balance সরাসরি পরিবর্তন করা যাবে না
- Validation — deposit() এ amount check করা যায়
- Internal logic পরিবর্তন সহজ — বাইরের code ভাঙবে না
- Bug কম — ভুল ব্যবহারের সুযোগ কম
Getter ও Setter Pattern
Private property-তে access দিতে Getter/Setter ব্যবহার করা হয়।
class User {
private $email;
// Setter (validation সহ)
public function setEmail($email) {
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$this->email = $email;
} else {
throw new Exception("সঠিক ইমেইল দিন");
}
}
// Getter
public function getEmail() {
return $this->email;
}
}
$u = new User();
$u->setEmail("karim@example.com"); // ✅
echo $u->getEmail();
$u->setEmail("invalid"); // ❌ Exception
Property Type Declaration (PHP 7.4+)
class Product {
public string $name;
public float $price;
public int $stock = 0;
public ?string $description = null; // nullable
public array $tags = [];
}