عنوان مقاله :

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

گردآوری و تالیف : حسام موسوی
تاریخ انتشار : 20 مهر 1394
دسته بندی ها : برنامه نویسی

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

در مورد مفهوم برنامه نویسی شی گرا در 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

مقالات پیشنهادی

کامنت گذاری برای کدنویسی بهتر

بزارید این موضوع رو براتون اینطور باز کنم ، یک تصویر از یک نقطه ای از جهان به شما نشون میدن و میپرسن این کجاست شما قبلا اون تصویر رو ندیدید و براتون ن...

جدیدترن ابزار طراحی و برنامه نویسی وب - مهر 94

تحولات دیگه بصورت گذشته هر سال یا هر ماه اتفاق نمیوفته بلکه بصورت لحظه ای همه چی متحول میشه این قانون بر اینترنت و طراحی و برنامه نویسی وب هم حکم میکن...

کپسوله سازی - برنامه نویسی شی گرا در php | قسمت سوم

اولین باری که این اسم رو میبینید تعجب میکنید که این دیگه چیه . یعنی قراره چی باشه ! راستش خودمم همینطور بودم ، برام عجیب بود ولی وقتی معنی کسپوله سازی...

PHP یا PYTHON - کدام یک پیروز میدان است؟

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

دیدگاه های ارزشمند شما

relax | 1 سال پیش

آموزشاتون خوبه
یه سوال
میخوام بدونم اگه بخوام از همه دیتابیسام تو مای اسکویل یه کپی داشته باشم شدنیه؟
راهی هست که قبل پاک کردن ویندوز کل دیتابیسمو یکجا بریزم یه جای بعد یکجا دوباره ایمپورت کنم؟

admin | 1 سال پیش

با استفاده از phpmyadmin دیتابیس مورد نظرتون رو انتخاب میکنید و اون رو با تمام یا با انتخاب جداول Export میکنید و در جای نگهداری میکنید در وقت لازم دوباره Import میکنید .