TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 609 subscribers
Post #48 191
#magic_method #oop #php
چهار مجیک متد بعدی
__get(), __set(), __isset(), __unset() 
هستند و در ادامه آنها را با ذکر مثال بررسی می کنیم.
این متد ها برای مدیریت دسترسی به ویژگی‌ها در کلاس‌ها استفاده می‌شوند و به شما این امکان را می‌دهند تا در زمان اجرا عملیات خاصی را بر روی پروپرتی‌های موجود در یک شئ انجام دهید.

مجیک متد __get() : این متد وقتی فراخوانی می‌شود که شما به یک پروپرتی غیرمعتبر یا غیرقابل دسترس در کلاس دسترسی پیدا کنید. با استفاده از این متد، شما می‌توانید عملیاتی را تعریف کنید تا مقدار پروپرتی مورد نظر را برگرداند یا عملیات دلخواه خود را انجام دهید.مثال:
class MyClass {
public function __get($name) {
return $name;
}
}

$obj = new MyClass();
$obj->name = 'Reza';
echo $obj->name;

Result:
Reza

در مثال بالا پراپرتی name را برابر Reza قرار داده ایم. تا اینجا خبری از
__get()
نیست تا وقتی که قصد چاپ مقدار name را داریم، برای چاپ شدن مقدار name نیاز به دسترسی به آن است و این یعنی متد get() فراخوانی می شود و این ویژگی را می گیرد و نمایش می دهد.

مجیک متد __set() : این متد وقتی فراخوانی می‌شود که شما به یک پروپرتی غیرمعتبر یا غیرقابل دسترس در کلاس مقداردهی کنید. با استفاده از این متد، شما می‌توانید عملیاتی را تعریف کنید تا مقدار داده شده به پروپرتی را در کلاس ذخیره کند یا عملیات دلخواه خود را انجام دهید. مثال:
class MyClass {    
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
}

$obj = new MyClass();
$obj->name = 'Reza';
echo $obj->name;

Result:
Reza

در مثال بالا هنگام مقدار دهی name متد __set() صدا زده می شود و عملیات مقدار دهی را انجام می دهد.

در دو مثال بالا از متد های __get() و __set() صدا زده نشوند در برخی مواقع کد اجرا می شود ولی این راه غیر اصولی است و کد همراه با هشدار اجرا می شود.

مجیک متد __isset() : این متد وقتی فراخوانی می‌شود که شما از عملگر isset() برای چک کردن وجود یک پروپرتی در کلاس استفاده کنید. با استفاده از این متد، شما می‌توانید عملیاتی را تعریف کنید تا بررسی کند آیا پروپرتی در کلاس وجود دارد یا نه. مثال:
class MyClass {
private $data = [];
public function __isset($name) {
return isset($this->data[$name]);
}
}

$obj = new MyClass();
$obj->name = 'John';
var_dump(isset($obj->name));
var_dump(isset($obj->age));

Result:
bool(true)
bool(false)

در مثال بالا زمانی که isset() روی
$obj->name
و
$obj->age
اعمال می شود مجیک متد __isset() فراخوانی می شود و وجود پراپرتی را بررسی می کند.

مجیک متد __unset() : این متد وقتی فراخوانی می‌شود که شما از عملگر unset() برای حذف یک پروپرتی در کلاس استفاده کنید. با استفاده از این متد، شما می‌توانید عملیاتی را تعریف کنید تا پروپرتی مورد نظر را از کلاس حذف کند یا عملیات دلخواه خود را انجام دهید. مثال:
class MyClass {
private $data = [];
public function __unset($name) {
unset($this->data[$name]);
}
}

$obj = new MyClass();
$obj->name = 'John';
unset($obj->name);
var_dump(isset($obj->name));

Result:
bool(false)

در مثال بالا هنگام
unset()
کردن
$obj->name
متد __unset() اجرا می شود و عملیات حذف پراپرتی را انجام می دهد.

تمامی متد های بالا زمانی استفاده می شوند که بخواهیم عملی را روی پراپرتی تعریف نشده یا private و protected انجام دهیم.
.
  • 👍 2
  • ❤ 1
More from @amirhdeveloper
  1. Oct 8, 2026‍ اولین نسخه‌ی «قیچی» منتشر شد! ✂️ راست‌ش چند وقتی هست که پیامک‌های تبلیغاتی و اسپم، شدیدا…
  2. Oct 7, 2026بیاید از قدرت های لاراگرام بگم لاراگرام یک full-stack و ai-ready فریمورک برای توسعه ربات ه…
  3. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  4. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  5. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  6. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
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 →