دسته بندی :
تاریخ انتشار : ۲۸ شهریور ۱۳۹۴
گردآوری و تالیف : حسام موسوی

کارمو با طراحی گرافیکی شروع کردم و حدود 2 سال طراحی گرافیکی میکردم بعد به طراحی وب علاقه پیدا کردم و همراه طراحی وب عاشق کدنویسی شدم به PHP | sass | css | Jquery | javaScript تسلط کامل دارم . در بین فریم ورک های PHP اول با CodeIgniter کار کردم اما به laravel علاقه مند شدم و دارم بطور حرفه ای دنبالش میکنم . امید من اینکه بتونم کاربرهای ایرانی رو به دنیای بیرون متصل کنم تا بتونن از فناوری های تازه آگاهی داشته باشن

با سلام خدمت کاربرای عزیز وبسایت راکت در قسمت اول یعنی "برنامه نویسی شی گرا در php | قسمت اول" اومدیم شی گرایی رو معرفی و در مورد کلاس ها و شی ها هم صحبت کردیم و یک مثال ساده از یک کلاس زدیم . در این قسمت میخوام در مورد property ها و همینطور method ها در کلاس صحبت کنم و بگم که چی هستن و به چه کاری میان . ابتدا از property ها شروع می کنم

معرفی property ها

برای اضافه کردن اطلاعات در کلاس ها از property ها استفاده میشه . کار اونها دقیقا شبیه متغیرها در php معمولیه و تنها تفاوتشون اینکه قبل از تایپ اسم property از کلمات کلیدی private protected و public استفاده میشه ، این کلمات کلیدی رو در کپسوله سازی (پنهان سازی) بطور کامل توضیح می دم فقط فعلا در همین حد بدونید که این کلمات باید برای تعریف property ها و method ها قبل از اسم اونها قرار بگیرن . 

به مثال زیر دقت کنید . 

<?php

class MyClass
{
  public $name = 'john doe';
}

$obj = new MyClass;

var_dump($obj);

?>

در بالا با استفاده از کلمه public تعیین کردیم که property مون برای استفاده در یک object قابل مشاهدست و همینطور property به اسم name$ تعریف و بعد اون رو مقدار دهی کردیم و بعد با تعریف یک شی و قرار دادن اون در var_dump اطلاعات کامل رو برگشت دادیم . 

شما به راحتی میتونید بعد از تعریف شی دوباره property رو مقداردهی کنید البته تنها در حالتی که اون property از نوع public باشه و همینطور به راحتی میتونید اون رو با استفاده از echo چاپ کنید . البته برای چاپ یا مقداردهی دوباره ، نیاز به دسترسی به اون property از طریق object دارید برای اینکار بعد از تایپ اسم object با قرار دادن یک فلش ( <- ) و تایپ اسم property میتونید به اون دسترسی داشته باشید . به مثال زیر دقت کنید

<?php

class MyClass
{
  public $name = 'John Doe';
}

$obj = new MyClass;

echo $obj->name . '</br >';

$obj->name = 'Hesam Mousavi';

echo $obj->name ;

?>

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

John Doe
Hesam Mousavi

معرفی method ها

method ها دقیقا کار توابع رو در کلاس ها انجام میدن یعنی تفاوتی چندانی با هم ندارن method ها هم با قرار گرفتن کلمه کلیدی private protected و public قبل از function تعریف میشن . یک method میتونه به شی ها کمک کنه که در داخل کلاس ها عملیاتی رو انجام بدن البته این عملیات توسط متدها مشخص میشه . 

برای مثال متدهای برای set و get کردن اطلاعات property داخل کلاس می نویسیم . به کد زیر دقت کنید : 

<?php

class MyClass
{
  public $name = 'John Doe';

  public function setProperty($newval)
  {
     $this->name = $newval;
  }
  
  public function getProperty()
  {
     return $this->name . "</br >";
  }

}

$obj = new MyClass;

echo $obj->name;

?>

نکته : در کد بالا ما در دو جا از this$ استفاده کردیم و بعد با یک فلش و قرار دادن اسم property بهش دسترسی پیدا کردیم . در اصل این طریقه دسترسی به property ها و  method ها در داخل یک  method است . چون بطور معمولی شما نمی تونید با تایپ فقط اسم property یا method بهش دسترسی داشته باشید تنها زمانی که از this$ و با روش بالا عمل کنید میتونید به یک  property و  method از یک کلاس داخل یک method دسترسی پیدا کنید . 

در کد بالا من فقط با قرار دادن obj->name$ اومدم مقدار این  property رو چاپ کردم اما در مثال زیر من ابتدا من با استفاده از متد getProperty میام مقدار فعلی name$ رو چاپ میکنم و بعد در مرحله بعدی با استفاده از متد setProperty و ارسال یک مقدار به عنوان آرگومان میام یک مقدار جدید برای name$ تعیین میکنم و بعد دوباره با چاپ کردن متد getProperty میام مقدار فعلیش رو چاپ می کنیم . این یک روش مهم برای set و get کردن  property هاست که به زودی در قسمت بعد دلیلش رو هم میفهمید ولی فعلا از دید امتحان کردن یک متد بهش نگاه کنید . 

<?php
 
class MyClass
{
  public $name = "John Doe";
 
  public function setProperty($newval)
  {
      $this->name = $newval;
  }
 
  public function getProperty()
  {
      return $this->name . "<br />";
  }
}
 
$obj = new MyClass;
 
echo $obj->getProperty(); // Get the property value
 
$obj->setProperty("Hesam Mousavi"); // Set a new one
 
echo $obj->getProperty(); // Read it out again to show the change
 
?>

نتیجه زیر حاصل از اجرای کد بالاست 

John Doe
Hesam Mousavi

[ قدرت oop زمانی اشکار میشه که ما چند شی از یک کلاس می سازیم ]

به مثال زیر دقت کنید : 

<?php
 
class MyClass
{
  public $name = "John Doe";
 
  public function setProperty($newval)
  {
      $this->name = $newval;
  }
 
  public function getProperty()
  {
      return $this->name . "<br />";
  }
}
 
// Create two objects
$obj = new MyClass;
$obj2 = new MyClass;
 
// Get the value of $name from both objects
echo $obj->getProperty();
echo $obj2->getProperty();
 
// Set new values for both objects
$obj->setProperty("I'm a new name! Mohammad");
$obj2->setProperty("obj 2 with name Ali");
 
// Output both objects' $name value
echo $obj->getProperty();
echo $obj2->getProperty();
 
?>

نتیجه زیر حاصل از اجرای کد بالاست 

John Doe
John Doe
I'm a new name! Mohammad
obj 2 with name Ali

همانطور که در بالا میبینید شما با استفاده از oop می تونید از یک قطعه کد بارها و بارها در قالب اشیاء مختلف استفاده کیند . امیدوارم این قسمت مورد استفاده اتون قرار گرفته باشه در قسمت بعد بحث کپسوله سازی یا همون پنهان سازی اطلاعات رو آموزش میدم . 

دیدگاه های مخاطبین

ثبت دیدگاه شما
  • کوثر

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

  • محمد حسین

    با تشکر از مطالب مفید و خوبتون

  • امیر

    زبانی که weakly typed هست برنامه نویسی oop براش مضحکه..
    الان میشه مثلا یک کلاس جنریک تعریف کنی ؟

    • محمد

      جنریک => مثلا میخواییم سه نوع عدد رو جمع کنیم شما یه دونه تابع مینویسی ک خودش تشخیص بده
      تو php لازم نیس هر سطر اینو به اون تبدیل کنی هی هر سطر بنویسی convert to....
      خودش اتومات تشخیص میده
      اینم از لحاظ فنی
      خوش باشی

    • محمد

      عزیزم شما دو سطر کد asp نوشتی اونوقت چرا تو همه زبان ها اظهار نظر میکنی اخه ؟
      مگه چقدر بلدی ؟
      هیچ وقت سیب رو با پرتقال مقایسه نمیکنن
      من php yii - php laravel - asp.net mvc کار کردم و cms های بزرگی هم نوشتم
      هر چند بخوای بگی نمیشه دوتاش رو با هم یاد گرفت ولی امتحانمو پس دادم و برا asp کار ها ثابت کردم هیچی بلد نیستند و خودشون هم اقرار کردن
      خب شما الان چطوری اجازه میدی ب خودت بیای خودتو اینجا اماتور جلوه بدی
      خودتو نخندون عزیز

    • admin

      php هر چی جلو تر میره type هاش داره بهتر میشه مخصوصا در نسخه 7
      و واقعا جنریک کلاس مهمه ؟
      و به نظرم مضحکه کلمه ای عجیبیه برای php ! چون کد نویسی با php واقعا لذت بخشه مخصوصا در حالتی که از oop و mvc و Design pattern ها در کنار هم استفاده میشه .
      در نهایت نظر شما هم محترم ولی میشه بپرسم شما خودتون از چه زبانی استفاده میکنید ؟

  • مهرداد

    عالیه
    دستتون درد نکنه

پیشنهاد میکنیم این مطالب رو هم مطالعه کنید :