TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #32 729
در PHP، مجیک متد‌های __get و __set برای دسترسی به پراپرتی که به طور مستقیم قابل دسترسی نیستند یا وجود خارجی ندارند، استفاده می‌شوند. این مجیک متدها اجازه می‌دهند تا شما در هنگام دسترسی یا تنظیم مقادیر پراپرتی کلاس، کنترل بیشتری داشته باشید. به عبارت دیگر، وقتی خواسته می‌شود که به یک پراپرتی دسترسی پیدا شود که تعریف نشده است یا دسترسی مستقیم به آن امکان‌پذیر نیست، این متد‌ها فعال می‌شوند.

مجیک متد __get:
این مجیک متد زمانی فراخوانی می‌شود که سعی می‌کنید به یک پراپرتی که وجود ندارد یا خصوصی است، دسترسی پیدا کنید.

مثال:
class User {
private $data = [
"name" => "John Doe",
"email" => "john@example.com"
];

public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
} else {
return null;
}
}
}

$user = new User();
echo $user->name; // Outputs: John Doe
echo $user->email; // Outputs: john@example.com
echo $user->age; // Outputs: null


در این مثال، هرگاه که می‌خواهیم به name یا email دسترسی پیدا کنیم، مجیک متد __get فراخوانی شده و مقدار مربوطه برگردانده می‌شود. اگر پراپرتی وجود نداشته باشد، null برگردانده می‌شود.

مجیک متد __set:
این مجیک متد زمانی فراخوانی می‌شود که سعی می‌کنید مقدار یک پراپرتی که وجود ندارد یا خصوصی است را تنظیم کنید.

مثال:
class User {
private $data = [
"name" => "John Doe",
"email" => "john@example.com"
];

public function __set($name, $value) {
if (array_key_exists($name, $this->data)) {
$this->data[$name] = $value;
}
}
}

$user = new User();
$user->name = "Jane Doe"; // changes the name property
echo $user->name; // Outputs: Jane Doe


در این مثال، مقدار name از طریق مجیک متد __set تغییر می‌کند. اگر پراپرتی وجود نداشته باشد، امکان افزودن یا تغییر آن وجود ندارد و می‌توانید خطایی را لاگ یا اکسپشن بیندازید.

مثال تکمیلی:
class Product {
private $data = [];

public function __set($key, $value) {
switch ($key) {
case "price":
if (!is_numeric($value) || $value < 0) {
throw new Exception("Invalid price");
}
break;
case "name":
$value = trim(strip_tags($value));
break;
}
$this->data[$key] = $value;
}

public function __get($key) {
return $this->data[$key] ?? null;
}
}

$product = new Product();
$product->name = "New <b>Product</b>"; // HTML tags will be removed
$product->price = 20;

echo $product->name; // Outputs: New Product
echo $product->price; // Outputs: 20


در این مثال، مجیک متد __set به گونه‌ای تعریف شده است که قبل از ذخیره‌سازی، مقدار قیمت را بررسی می‌کند تا از صحت آن اطمینان حاصل کند و از ذخیره‌سازی مقادیر نامعتبر جلوگیری کند. همچنین، نام محصول از تگ‌های HTML پاک می‌شود.
سپس توسط مجیک متد __get نام و قیمت دریافت می شود.
همه این ها در حالی است که پراپرتی های name و price در کلاس ما وجود ندارند.

مجیک متدهای __get و __set در PHP ابزارهای قدرتمندی هستند که به شما امکان می‌دهند کنترل بیشتری بر نحوه دسترسی و تغییر داده‌ها در کلاس‌هایتان داشته باشید.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 5
  • ❤ 1
  • 🔥 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 &rlm;LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →