برنامه نویسی شی گرا در php | قسمت پنجم
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 4 دقیقه

برنامه نویسی شی گرا در php | قسمت پنجم

با سلام خدمت دوستان و کاربران عزیز وبسایت راکت در قسمت های قبل یعنی

در مورد مفهوم برنامه نویسی شی گرا در php و همینطور در مورد property ها و method ها و Encapsulation (کپسوله سازی) و در مورد Inheritance (وراثت) صحبت کردیم و با مثال های مختلف اونا رو بهتون یاد دادیم در این جلسه قصد داریم در مورد Magic Methods صحبت کنیم  و اونو بهتون آموزش بدم امیدوارم مورد استفاده اتون قرار بگیره . 

متدهای جادوئی در شی گرایی php

خب امروز در این پست رسیدیم به متدهایی جادوئی در شی گرایی php . 

php برای ساده تر کردن بعضی از کارها در کلاس ها یک سری متدهای خاص و ویژه در شی گرایی قرار داده که این موضوع به توسعه دهندگان اجازه میده تا تعدادی از کارهای مفید رو به سهولت انجام بدن . 

من در اینجا چندتا از این متدهای جادوئی رو توضیح میدم امیدوارم کاملا با این مبحث آشنا بشین.

استفاده از Constructors , Destructors

بزارید اینطور براتون توضیح بدم. زمانی که شما یک object رو از کلاسی میسازید در همون ابتدای ساختن بطور اتوماتیک می خواید یک سری اعمال انجام بشه . شما اینکار رو به سادگی با متد __construct()  می تونید انجام بدید. یه ویژگی در مورد متدهای جادوئی که یادم رفت در بالا بگم اینکه تمام متدهای جادوئی دارای دو Underscore یا ( _ _ ) در قبل اسم متد هستن که به این صورت میشه فهمید که اون متد یک متد جادوئیه . 

حالا اگه شما بخواین راحت تر با کار __construct() آشنا بشین در زیر یک مثال از این متد میزنم که در هنگام ایجاد شدن obj یک مقداری رو بطور اتوماتیک چاپ کنه .  

<?php
 
class MyClass
{
  public $prop1 = "I'm a class property!";
 
  public function __construct()
  {
      echo 'The class "', __CLASS__, '" was initiated!<br />';
  }
 
  public function setProperty($newval)
  {
      $this->prop1 = $newval;
  }
 
  public function getProperty()
  {
      return $this->prop1 . "<br />";
  }
}
 
// Create a new object
$obj = new MyClass;
 
// Get the value of $prop1
echo $obj->getProperty();
 
// Output a message at the end of the file
echo "End of file.<br />";
 
?>

در بالا شما در یک قسمت با __CLASS__ مواجه شدید که این یک ثابت جادوئیه ( magic constant ) که دقیقا مثل متدهای جادوئی یک سری اعمال رو انجام میده مثلا در این جا __CLASS__ اسم کلاسی که توش قرار داره رو بر میگردونه . شما با مراجعه به این صفحه میتونید مابقی magic constant رو ببینید . 

در زیر میتونید نتیجه کد بالا رو مشاهده کنید . 

The class "MyClass" was initiated!
I'm a class property!
End of file.

خب حالا میرسیم به متد __destruct() . زمانی که یک Object نابود میشه این متد فراخونی و اجرا میشه یکی از مثال های این مورد میتونه زمانی که ارتباط با دیتابیس بسته میشه باشه که این متد اجرا بشه و یه سری کارها رو انجام بده . 

در زیر با استفاده از این متد زمانی که یک obj نابود میشه یک پیام چاپ میشه . به مثال زیر دقت کنید . 

<?php
 
class MyClass
{
  public $prop1 = "I'm a class property!";
 
  public function __construct()
  {
      echo 'The class "', __CLASS__, '" was initiated!<br />';
  }
 
  public function __destruct()
  {
      echo 'The class "', __CLASS__, '" was destroyed.<br />';
  }
 
  public function setProperty($newval)
  {
      $this->prop1 = $newval;
  }
 
  public function getProperty()
  {
      return $this->prop1 . "<br />";
  }
}
 
// Create a new object
$obj = new MyClass;
 
// Get the value of $prop1
echo $obj->getProperty();
 
// Output a message at the end of the file
echo "End of file.<br />";
 
?>

با تعریف یک destruct خروجی کد بالا به صورت زیر میشه . 

The class "MyClass" was initiated!
I'm a class property!
End of file.
The class "MyClass" was destroyed.

شما با یک تابع به اسم unset می تونید یک Obj رو زودتر از زمانی که قراره نابود بشه نابود کنید. در زیر یک مثال با این تابع میزنم تا بهتر بتونید این مسئله و درک کنید . 

<?php
 
class MyClass
{
  public $prop1 = "I'm a class property!";
 
  public function __construct()
  {
      echo 'The class "', __CLASS__, '" was initiated!<br />';
  }
 
  public function __destruct()
  {
      echo 'The class "', __CLASS__, '" was destroyed.<br />';
  }
 
  public function setProperty($newval)
  {
      $this->prop1 = $newval;
  }
 
  public function getProperty()
  {
      return $this->prop1 . "<br />";
  }
}
 
// Create a new object
$obj = new MyClass;
 
// Get the value of $prop1
echo $obj->getProperty();
 
// Destroy the object
unset($obj);
 
// Output a message at the end of the file
echo "End of file.<br />";
 
?>

خب حالا به نتیجه کد بالا دقت کنید . 

The class "MyClass" was initiated!
I'm a class property!
The class "MyClass" was destroyed.
End of file.

Converting to a String ( تبدیل به یک رشته )

اگر شنا یک obj رو بخواین بطور مستقیم به عنوان رشته چاپ کنید قطعا با ارور مواجه میشید . اما با استفاده از متد جادوئی __toString() میتونید یک obj رو بصورت یک رشته چاپ کنید .

در زیر مثالی می زنم که قصد دارم obj رو بصورت یک رشته با echo چاپ کنم اما با ارور مواجه میشم . 

<?php
 
class MyClass
{
  public $prop1 = "I'm a class property!";
 
  public function __construct()
  {
      echo 'The class "', __CLASS__, '" was initiated!<br />';
  }
 
  public function __destruct()
  {
      echo 'The class "', __CLASS__, '" was destroyed.<br />';
  }
 
  public function setProperty($newval)
  {
      $this->prop1 = $newval;
  }
 
  public function getProperty()
  {
      return $this->prop1 . "<br />";
  }
}
 
// Create a new object
$obj = new MyClass;
 
// Output the object as a string
echo $obj;
 
// Destroy the object
unset($obj);
 
// Output a message at the end of the file
echo "End of file.<br />";
 
?>

خروجی کد بالا بصورت زیره که ارور رو هم میتونید ببینید : 

The class "MyClass" was initiated!
 
Catchable fatal error: Object of class MyClass could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/testing/test.php on line 40

برای رفع ارور ما میتونیم از متد __toString() استفاده کنیم 

<?php
 
class MyClass
{
  public $prop1 = "I'm a class property!";
 
  public function __construct()
  {
      echo 'The class "', __CLASS__, '" was initiated!<br />';
  }
 
  public function __destruct()
  {
      echo 'The class "', __CLASS__, '" was destroyed.<br />';
  }
 
  public function __toString()
  {
      echo "Using the toString method: ";
      return $this->getProperty();
  }
 
  public function setProperty($newval)
  {
      $this->prop1 = $newval;
  }
 
  public function getProperty()
  {
      return $this->prop1 . "<br />";
  }
}
 
// Create a new object
$obj = new MyClass;
 
// Output the object as a string
echo $obj;
 
// Destroy the object
unset($obj);
 
// Output a message at the end of the file
echo "End of file.<br />";
 
?>

در مثال بالا ما با استفاده از toString به علاوه اینکه یک رشته رو چاپ میکنیم ، یک متد از کلاس به اسم getProperty رو هم بر میگردونیم که شما برای واضح تر شدن و درک این موضوع به نتیجه کد بالا دقت کنید . 

The class "MyClass" was initiated!
Using the toString method: I'm a class property!
The class "MyClass" was destroyed.
End of file.

خب در این پست من چند تا از متدهای جادوئی رو معرفی کردم که امیدوارم باهشون آشنا شده باشید اگر میخواید با متدهای بیشتری از متدهای جادوئی آشنا بشین به این صفحه مراجعه کنید . "Magic Methods

/@hesammousavi
حسام موسوی
طراح و برنامه نویس

بیشتر از ۱۵ سال هست که در حال برنامه‌نویسی و انجام پروژه های مختلف هستم و ۱۰ سالی هست که آموزش برنامه‌نویسی به علاقمندان حوزه برنامه نویسی میدیم در همه این مدت الان عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید