چهار مجیک متد بعدی
__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 انجام دهیم..