آموزش PHP: جلسه بیست و چهارم: شیءگرایی (بخش پایانی)

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

طی سه جلسه‌ی قبل، در مورد شیءگرایی در پی‌اچ‌پی بحث کردیم و به صورت مرحله به مرحله تا گام ۱۷ پیش رفتیم. در این جلسه مراحل پایانی یادگیری شیءگرایی را خواهیم آموخت.

مرحله‌ی هجدهم:

ارث‌بری، استفاده مجدد از کدهای نوشته شده با ساختار OOP

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

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

فرض کنید که قصد ایجاد یک کلاس جدید به نام employee (کارمند) را دارید. از آنجا که هر کارمند یک شخص نیز است، بنابراین این دو می‌توانند پروپرتی‌ها و متدهای مشترکی داشته باشند.

آیا این روش منطقی به نظر می‌رسد؟

با استفاده از ویژگی‌های ارث‌بری می‌توانید کد کمتر و بهینه‌تری را تولید کنید چراکه فقط موارد اضافه را باید به کلاس جدید اضافه کنید و در واقع می‌توان از ویژگی‌های یک کلاس دیگر به منظور ساخت کلاس جدید در پی‌اچ‌پی بهره گرفت. دو عامل زیر از جمله دلایلی تلقی می‌شوند که باعث شده استفاده از ارث‌بری در کلاس‌های پی‌اچ‌پی منطقی به نظر برسد.

  1. شما فقط یک بار باید کد موردنظرتان را بنویسید.
  2. کد اولیه و اصلی مجددا استفاده خواهد شد و می‌توان از آن در هر تعداد کلاس دیگر، استفاده کرد.

از نظر مفهومی ارث‌بری شبیه به عملیات Include کردن است که در جلسات قبل به صورت مفصل آن را توضیح داده بودیم.

نگاهی به کد پی‌اچ‌پی زیر بیاندازید و با دقت آن را بررسی کنید.

// ‘extends’ is the keyword that enables inheritance
class employee extends person
{
      function __construct($employee_name)

     {
            $this->set_name($employee_name);
       }
}

مرحله‌ی نوزدهم:

استفاده مجدد از کدها با استفاده از ویژگی ارث‌بری‌: بخش دوم

از آنجا که کلاس employee بر پایه‌ی کلاس person ایجاد شده است، بنابراین کلاس employee به‌طور خودکار تمامی متدهای عمومی و محافظت‌شده‌ و نیز تمامی پروپرتی‌های عمومی و محافظت‌شده‌ی کلاس person را دارا خواهد بود.

نکته‌ی اضافه: به عبارت دیگر می‌توان گفت که کلاس employee در واقع نوعی دیگر از کلاس person است. به کد نمونه‌ی زیر توجه کنید تا مطلب بیان شده را بهتر درک کنید.

class employee extends person
{
      function __construct($employee_name)

     {
           $this->set_name($employee_name);
      }
}

اما چگونه بدون این‌که متد ()set_name در کلاس employee تعریف شده باشد ما قادر به استفاده از آن خواهیم بود؟

پاسخ: زیرا ما قبلا متد ()set_name را در کلاس person تعریف کرده بودیم و با توجه به ویژگی‌ ارث‌بری در پی‌اچ‌پی، کلاس جدید می‌تواند از متدهای عمومی و محافظت‌شده‌ی کلاس پایه استفاده کند.

نکته: کلاس person در اینجا کلاس پایه یا کلاس والد خوانده می‌شود زیرا کلاس جدیدی که به نام employee ساختیم، به عنوان ساختار پایه از کلاس person بهره گرفته است. سسله‌مراتب همیشه در پروژه‌های مختلف پی‌اچ‌پی یک موضوع مهم است که باید به آن توجه ویژه داشته باشید. این امر به ویژه وقتی که پروژه‌ی شما پیچیده‌تر می‌شود بسیار کارا خواهد بود.

مرحله‌ی بیستم:

استفاده‌ی مجدد از کدهای نوشته‌ شده: بخش سوم

همان‌طور که در کد زیر نیز مشاهده می‌کنید، می‌توانیم متد get_name را در کلاس employee فراخوانی کنیم. کد زیر یک مثال بسیار خوب برای فهم بیشتر این مبحث است.

<?php

       include(“class_lib.php”);

?>
<?php
     // Using our PHP objects in our PHP pages.
     $mojtaba = new person(“mojtaba bolhasani”);
     echo “mojtaba’s full name: ” . $mojtaba->get_name();
     $miaad = new employee(“miaad baferasat”);
     echo “—> ” . $miaad->get_name();
?>

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

مرحله‌ی بیست‌ویک:

اووِر راید کردن متدها

برخی مواقع هنگام استفاده از ویژگی ارث‌بری، ممکن است نیاز به تغییر برخی از توابع کلاس پایه داشته باشید.

به عنوان مثال، اجازه دهید متد ()set_name در کلاس employee را تغییر دهیم به نحوی که این متد در این کلاس نسبت کلاس person تغییر یابد.

در این شرایط شما با تعریف کردن متدی مشابه در کلاس employee، در واقع نسخه‌هایی از متد ()set_name را از کلاس person، اووِر راید کرده‌اید. به کد زیر توجه کنید:

<?php
   class person
   {
         protected function set_name($new_name)

         {
                if ($new_name != “Mojtaba Two Guns”)

                {
                     $this->name = strtoupper($new_name);
                }
         }
   }
   class employee extends person
   {
         protected function set_name($new_name)

         {
                if ($new_name == Mojtaba Bolhasani”)

                {
                      $this->name = $new_name;
                }
         }
   }
?>

توجه داشته باشید که متد ()set_name اکنون و پس از تغییرات بالا در کلاس جدید employee با همین متد در کلاس پایه با همان person تفاوت دارد.

مرحله‌ی بیست‌ودوم:

اووِر راید کردن متدها: بخش دوم

گاهی ممکن است نیاز داشته باشید تا به نسخه‌ی اصلی متدی در کلاس پایه دسترسی داشته باشید که آن را در کلاس جدید اوور راید کرده‌اید.

در مثال ما، متد ()set_name در کلاس employee اوور راید شده است. حالا قصد داریم از کد زیر استفاده کنیم:

person::set_name($new_name);

به منظور دسترسی به نسخه‌ی اصلی متد ()set_name که در کلاس والد (person) وجود دارد، باید از کدی شبیه به زیر استفاده کنیم:

<?php
    class person
    {
      // explicitly adding class properties are optional – but
      // is good practice
      var $name;
      function __construct($persons_name) {
      $this->name = $persons_name;
    }

    public function get_name()

    {
       return $this->name;
    }

    // protected methods and properties restrict access to
    // those elements.
    protected function set_name($new_name)

    {
       if ($this->name != “Mojtaba Two Guns”)

       {
            $this->name = strtoupper($new_name);
       }
    }
}

// ‘extends’ is the keyword that enables inheritance
class employee extends person
{
      protected function set_name($new_name)

      {
            if ($new_name == “Stefan Sucks”)

            {
                 $this->name = $new_name;
            }
            else if ($new_name == “Johnny Fingers”)

            {
                 person::set_name($new_name);
            }
      }
      function __construct($employee_name)
      {
            $this->set_name($employee_name);
      }
   }
?>

نکته: استفاده از سیمبل‌ها (symbol)

::

استفاده از :: برای تشخیص نام کلاسی که قصد داریم از متدهای داخلی آن استفاده کنیم به کار می‌رود. به مثال زیر توجه کنید تا این مبحث را بیشتر توضیح دهیم.

‘person::set_name()’

کد بالا به پی‌اچ‌پی می‌گوید که به دنبال متد ()set_name در کلاس person بگردد.

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

protected function set_name($new_name)
{
      if ($new_name == “Mojtaba bhs”)

      {
            $this->name = $new_name;
      }
      else if ($new_name == “Miaad Bafer”)

      {
            parent::set_name($new_name);
      }
}

نتجیه‌گیری

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

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

به عنوان مثال پیشنهاد می‌کنیم چند کلاس عمومی برای خود ایجاد کنید. این کلاس‌ها باید شامل متدهایی باشد که فکر می‌کنید در چند پروژه مختلف مورد استفاده واقع خواهند شد. پس از نوشتن چند نمونه کلاس و یادگیری مراحل توضیح داده شده از جلسه بیست‌ویکم تا بیست‌وچهارم، مطمئنا کدنویسی به روش OOP برای شما آسان‌تر و بسیار بهتر خواهد شد.

در پایان اگر سوالی در مورد مباحث این جلسه دارید، لطفا آن را در بخش نظرات با ما و سایر کاربران به اشتراک بگذارید.

 
منبع زومیت

آموزش PHP: جلسه بیست و سوم: شیءگرایی (بخش سوم)

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

در دو جلسه‌ی قبلی ۱۱ مرحله مختلف را گذراندیم تا مبحث شیءگرایی را در پی‌اچ‌پی به روش عملی یاد بگیریم. در ادامه به سراغ مراحل بعدی می‌رویم.

مرحله دوازدهم:

دسترسی مستقیم به پروپرتی‌ها (توصیه نمی‌شود)

برای دسترسی مستقیم به خواص اشیاء ساخته شده در پی‌اچ‌پی، نیازی به استفاده از متدها ندارید. شما می‌توانید به‌طور مستقیم با استفاده از عملگر <- و نام متغیر (پروپرتی) موردنظر، به آن دسترسی داشته باشید.

به عنوان مثال اگر در کلاس پی‌اچ‌پی نوشته شده‌ی خود، یک پروپرتی به نام name$ (در شیء mojtaba$) داشته باشید، برای دسترسی به مقدار این متغیر باید از کدی مثل زیر استفاده کنید:

$name = $mojtaba->name;

البته همان‌طور که اشاره کردیم، استفاده از این روش پیشنهاد نمی‌شود چرا که امکان دارد در ادامه مسیر، با مشکلاتی مواجه شوید. برای دسترسی به مقادیر متغیرها (پروپرتی‌ها) در یک کلاس پی‌اچ‌پی، بهتر است از متدهای دریافت‌کننده یا همان Getter استفاده کنید.

به کد زیر توجه کنید تا آنچه گفته شد را بیشتر درک کنید.

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;

$mojtaba->set_name(“mojtaba bolhasani”);
$miaad->set_name(“miaad baferasat”);

// دسترسی مستقیم به مقدار یک پروپرتی در کلاس که پیشنهاد نمی‌شود
echo “mojtaba’s full name: “.$mojtaba->name;
?>

مرحله سیزدهم:

کانستراکتورها (constructor)

در تمامی کلاس‌های پی‌اچ‌پی می‌توان متدهایی موسوم به کانستراکتور را تعریف کرد که در واقع یک متد داخلی آن کلاس محسوب می‌شود. کانستراکتورها به شما اجازه می‌دهند تا خواص موردنظر کلاس خود را تعریف کنید. بدین طریق به محض ساختن و فراخوانی چنین کلاسی، متد کانستراکتور آن کلاس به صورت خودکار اجرا خواهد شد.

نکته: اگر تابعی به نام ()constructــ در کلاس موردنظرتان بسازید، پی‌اچ‌پی به‌طور خودکار متد (تابع) ()constructــ را پس از ساختن هر شیء و در واقع پس از اجرای کلاس، فراخوانی می‌کند.

به یاد داشته باشید که برای تعریف کانستراکتور در ابتدای نام آن باید دو علامت آندراسکور (آندرلاین ــ) قرار دهید و بدون هیچ فاصله‌ یا کاراکتر اضافه‌ای، کلمه‌ی construct را در ادامه‌ی نام آن بنویسید. برای درک بیشتر موضوع، به کد زیر توجه کنید:

<?php
class person {
var $name;
function __construct($persons_name) {
$this->name = $persons_name;
}

function set_name($new_name) {
$this->name = $new_name;
}

function get_name() {
return $this->name;
}

}
?>

از حالا به بعد به منظور پیش‌برد راحت‌تر و یکپارچه‌تر مبحث شی‌ءگرایی در پی‌اچ‌پی، هر جا صجبت از متد شد منظور ما تابع داخل کلاس است و هرجا از پروپرتی‌ها سخن گفتیم، منظور ما همان متغیرهای کلاس هستند.

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

مرحله چهاردهم:

ساختن یک کلاس (شیء) مجهز به کانستراکتور

حالا که ما با نحوه‌ی ساختن کانستراکتور آشنا شده‌ایم، می‌توانیم برای ساخت کلاس person، مقداری را به عنوان پیش‌فرض برای پروپرتی name$ مشخص کنیم. 

شما می‌توانید ورودی‌های مختلفی را به صورت آرگومان‌، برای متد کانستراکتور تعیین کنید. اگر با این موضوع آشنایی ندارید بد نیست سری به بخش آموزش توابع در پی‌اچ‌پی بزنید که پیش‌تر آن را در وبلاگ منتشر کرده‌ایم. برای افزودن ورودی به کانستراکتور، باید پس از استفاده از یک شیء ورودی‌ها را در داخل پرانتز و پس از نام کلاس موردنظر، وارد کنیم. به عنوان مثال به کد زیر توجه کنید:

$mojtaba = new person(“mojtaba bolhasani”);

استفاده از کانستراکتور و مقداردهی ورودی موردنیاز آن باعث می‌شود تا دیگر نیازی به فراخوانی متد ()set_name نداشته باشیم که همین کار باعث می‌شود با نوشتن کد کمتر، بتوان پروژه‌های مسنجم‌تری را ساخت. استفاده از کانستراکتورها همانند سایر زبان‌ها نظیر جاوا و … در بین برنامه‌نویسان این زبان، رایج است. باز هم توجه شما را به مثال زیر جلب می‌کنیم:

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person(“mojtaba bolhasani”);
echo “mojtaba’s full name: “.$mojtaba->get_name();
?>

استفاده از مکانسیم شی‌ءگرایی در مثال بالا، یکی از کاربردهای بسیار ساده‌ای است که می‌تواند در زمان و انرژی شما در کدنویسی صرفه‌جویی قابل توجهی کند. به یاد داشته باشید که برنامه‌نویسان حرفه‌ای این نکته را خوب می‌دانند: کد کمتر برابر است با باگ کمتر.

مرحله پانزدهم:

محدود کردن دسترسی به پروپرتی‌ها با اصلاح‌کننده‌های دسترسی

یکی از اصول بنیادی در برنامه‌نویسی شیءگرا، کپسوله‌سازی (encapsulation) است. اگر قصد دارید تا دسترسی به پروپرتی‌های مختلف را در کلاس خود محدود کنید، این ایده به شما کمک می‌کند تا کد خوانا‌تر و بهتری را تولید کنید.

برای محدود کردن دسترسی به پروپرتی‌های کلاس خود، باید از اصلاح‌کننده‌های دسترسی (ٰaccess modifiers) استفاده کنید. در پی‌اچ‌پی نیز مثل بسیاری از زبان‌های خانواده‌ی سی، ۳ عدد اصلاح‌کننده دسترسی موجود است:

  1. public (عمومی)
  2. private (خصوصی) 
  3. protected (محافظ شده)

اصلاح‌کننده‌ی پیش‌فرض برای هر پروپرتی در هر کلاس در پی‌اچ‌پی، Public است. به مثال زیر توجه کنید:

<?php
class person {
var $name;
public $height;
protected $social_insurance;
private $pinn_number;

function __construct($persons_name) {
$this->name = $persons_name;
}

function set_name($new_name) {
$this->name = $new_name;
}

function get_name() {
return $this->name;
}

}
?>

نکته: زمانی که شما یک پروپرتی را با استفاده از کلمه‌ی کلیدی var تعریف کنید، آن پروپرتی به صورت پیش‌فرض عمومی (Public) خواهد بود.

مرحله شانزدهم:

محدود کردن دسترسی به پروپرتی‌ها: بخش دوم

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

هنگامی که یک پروپرتی را در کلاس‌های پی‌اچ‌پی از نوع protected تعیین کنیم، فقط برخی از کلاس‌های مشتق شده از کلاس موردنظر، امکان دسترسی به پروپرتی‌ یاد شده را خواهند داشت. مشتق شدن و مباحث مربوط به ارث‌بری در کلاس‌های پی‌اچ‌پی را بعدا به شما آموزش خواهیم داد.

پروپرتی‌هایی که به صورت Public تعریف شده‌ باشند، محدودیت دسترسی نداشته و این یعنی هر کسی و هر کلاسی می‌تواند به مقدار آن‌ها دسترسی یابد.

به منظور فهم بیشتر این بخش تقریبا فرار از شیءگرایی در پی‌اچ‌پی، کد زیر را به دقت مشاهده کرده و آن را خودتان نیز تمرین، تا نتیجه را مشاهده کنید. برای درک بهتر کدها، کامنت‌های موجود در مثال زیر را نیز مطالعه کنید.

<?php include(“class_lib.php”); ?>
<?php
$stefan = new person(“Stefan Mischook”);
echo “Stefan’s full name: ” . $stefan->get_name() ;

/*
Since $pinn_number was declared private, this line of code
will generate an error. Try it out!
*/

echo “Tell me private stuff: “.$stefan->pinn_number;
?>

نکته: اگر بخواهید از طریق یک کلاس دیگر به یک پروپرتی خصوصی (private) در یک کلاس دیگر دسترسی داشته باشید، با خطای PHP مواجه خواهید شد. این خطا چیزی شبیه به متن زیر خواهد بود:

‘Fatal error: Cannot access private property person::$pinn_number in …’

مرحله هفدهم:

محدود کردن دسترسی به متدها درست همانند پروپرتی‌ها، شما می‌توانید دسترسی به متدهای تعریف شده در یک کلاس را با استفاده از ۳ اصلاح‌کننده زیر کنترل کنید.

  1. public (عمومی)
  2. protected (محافظت شده)
  3. private (خصوصی)

به‌طور خلاصه: امکان کنترل کردن دسترسی به متدهای هر کلاس، باعث می‌شود تا بتوانیم روش استفاده‌ی دیگران از آن کلاس را کنترل کنیم.

احتمالا شما هم متوجه شده‌اید که استفاده از محدودکننده‌های دسترسی و دیگر ساختارهای برنامه‌نویسی شیءگرا، کمی زیرکانه خواهد بود. این مورد برای افرادی که به تازگی شروع به یادگیری شیءگرایی کرده‌اند، بیشتر محسوس است. پس بهتر است شما نیز به خود شانسی بدهید و شروع به یادگیری و استفاده از این روش کنید.

با توجه به آنچه اشاره شد، باید بگوییم که ساختار یکپارچه‌ی برنامه‌نویسی شیءگرا باعث می‌شود تا بتوان روی پروژه‌های موجود که با این روش ساخته شده‌اند کار کرد یا پروژه‌های گروهی را به‌طور استانداردتر پیش برد. به کد زیر توجه کنید:

<?php
class person {
var $name;

public $height;
protected $social_insurance;
private $pinn_number;

function __construct($persons_name){
$this->name = $persons_name;
}

private function get_pinn_number(){
return
$this->pinn_number;
}
}
?>

نکته: از آنجا که متد ()get_pinn_number یک متد از نوع خصوصی (private) است، تنها جایی که می‌توان از این متد استفاده کرد، در همین کلاس است. اگر قصد دارید متدهای موردنظر خود را در صفحات پی‌اچ‌پی خود به‌طور مستقیم فراخوانی کنید، مسلما باید آن متدها را به صورت عمومی یا همان Public تعریف کرده باشید.

نکته اضافه: مجددا ذکر این مورد بسیار مهم است که بگوییم شما خودتان باید دست به‌کار شده و کدها را به‌طور عملی بنویسید و سپس آن‌ها را تست کنید. این کار باعث می‌شود تا موضوع موردبحث را بهتر درک کنید.

امیدواریم تا به اینجای مبحث، تمام مراحل را به ترتیبی که گفته شده فرا گرفته باشید. در صورتی که سوالی در مورد مباحث مطرح شده دارید، در بخش نظرات می‌توانید آن‌ را مطرح کنید.

 منبع زومیت

آموزش PHP – جلسه بیست و دوم: شیء گرایی (بخش دوم)

در ادامه‌ی سری آموزش پی‌اچ‌پی، همان‌طور که می‌دانید از جلسه قبل برنامه‌نویسی شیءگرا را آغاز کردیم. در این جلسه به ادامه مبحث شی‌ءگرایی خواهیم پرداخت. پس در ادامه‌ی این آموزش با ما همراه شوید.

در جلسه قبل مرحله به مرحله پیش رفتیم و گفتیم که بهترین روش یادگیری مبحث شیءگرایی، تمرین است. اگر جلسه قبل را هنوز مطالعه نکرده‌اید، لطفا ابتدا آن را مطالعه کرده و سپس ادامه آموزش را از این مطلب پیگیری کنید. پس از انجام مراحل یک تا پنج که در جلسه قبل توضیح داده شد، حال به سراغ گام‌های بعدی می‌رویم.

مرحله ششم:

متغیر this$ 

به کد زیر توجه کنید:

$this->name = $new_name;

در اینجا this$ در واقع یک متغیر درونی تلقی می‌شود که به شیء کنونی کلاس موردنظر اشاره دارد. به عبارت دیگر، متغیر this$ یک متغیر مخصوص برای ارجاع‌های داخلی است. به منظور دسترسی به پروپرتی‌ها که در جلسه قبل در مورد آن‌ها توضیح دادیم، می‌توانید از this$ استفاده کنید و از همین طریق اقدام به صدا زدن متدها یا همان توابع درونی یک کلاس کنید. مجددا توجه شما را به کد زیر جلب می‌کنیم:

function get_name() {
return $this->name;
}

در حال حاضر بهتر است this$ را بهعنوان یکی از کلمات کلیدی مخصوص شیءگرایی در پی‌اچ‌پی بشناسید. هنگامی که موتور پردازشی پی‌اچ‌پی به کلمه this$ برسد، می‌داند که چه کاری باید انجام دهد. خبر خوب این‌که شما هم به زودی با کمی تمرین دقیقا متوجه این ساختار خواهید شد و از آن لذت زیادی خواهید برد.

مرحله هفتم:

استفاده از کلاس ساخته شده در صفحه‌ اصلی پی‌اچ‌پی (index.php)

شما نباید هیچگاه در فایل‌های اصلی پروژه‌های خود، به صورت مستقیم اقدام به ساختن کلاس‌های موردنظر کنید. اگر کلاس‌ها را به‌طور مستقیم در فایل‌های اصلی پروژه تعریف کنید این کار باعث می‌شود تا از هدف اصلی شیءگرایی در پی‌اچ‌پی دور شوید.

بهترین کار این است که همیشه برای هر کلاس یک فایل جداگانه php ایجاد کنید تا همه چیز بسیار با نظم و مرتب باشد. سپس در هر فایلی از پروژه پی‌اچ‌پی خود می‌توانید از کلاس‌های مدنظرتان استفاده کنید. برای استفاده از یک کلاس در سایر فایل‌های پی‌اچ‌پی، همان‌طور که احتمالا می‌دانید و بارها نیز به این موضوع اشاره کرده‌ایم، می‌توانید از دستورات include یا require بهره ببرید.

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

<?php include(“class_lib.php”); ?>

نکته: توجه داشته باشید که تا به این لحظه هنوز در کلاس خود هیچ چیز نداریم و در ادامه متدها و پروپرتی‌های موردنظرمان را ایجاد خواهیم کرد.

مرحله هشتم:

معرفی کردن/ساختن اشیاء

کلاس‌ها نقشه‌های کلی یا قالب‌های کلی برای اشیاء در پی‌اچ‌پی هستند. تا زمانی که شما instantiation (نمونه‌سازی) را انجام ندهید، در واقع کلاس‌های پی‌اچ‌پی به اشیاء مبدل نخواهند شد.

هنگامی که شما یک کلاس را نمونه‌سازی کنید، در حقیقت یک نمونه از آن را تولید کرده‌اید و بنابراین می‌توان در این شرایط اقدام به ساخت اشیاء کرد.

به عبارت دیگر، نمونه‌سازی را می‌توان فرآیند ساخت یک نمونه از یک شیء در حافظه تعریف کرد. اما کدام حافظه؟ منظور ما در اینجا، البته حافظه سرور است. به کد زیر دقت کنید:

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
?>

نکته: متغیر mojtaba$ در کد بالا یک مرجع برای شیء تازه ساخته شده‌ی person خواهد بود. در اینجا گفتیم که متغیر mojtaba$ یک مرجع است چراکه ما از همین مرجع به منظور کنترل و استفاده از اشیاء کلاس person بهره خواهیم برد.

اگر شما کد بالا را اجرا کنید، هیچ چیزی را در صفحه مشاهده نخواهید کرد. دلیل این امر این است که ما هنوز به پی‌اچ‌پی نگفته‌ایم که چه کاری با شیء تازه ساخته شده‌مان انجام دهد.

مرحله نهم:

کلمه کلیدی “new”

به منظور ساختن یک شیء خارج از یک کلاس، شما باید از کلمه کلیدی new استفاده کنید. هنگام ساختن و نمونه‌سازی یک کلاس، همانند مثال زیر، شما می‌توانید به صورت اختیاری، به نام کلاس کاراکترهای پرانتز را اضافه کنید. برای فهم بیشتر این موضوع شما می‌توانید در کد زیر مشاهده کنید که چگونه می‌توان چندین شیء را از یک کلاس مشابه ایجاد کرد.

براساس روش کارکرد موتور پی‌اچ‌پی، هر شیٔ در واقع ماهیت خود را دارد. اما این منطقی به نظر می‌رسد؟ کد زیر را مشاهده و به دقت آن را بررسی کنید.

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;
?>

نکته: هنگام ساختن یک شیء، اطمینان حاصل کنید که نام آن کلاس را بین علامت ‘ ‘ قرار ندهید. به مثال زیر توجه کنید:

$mojtaba = new ‘person’;

کد بالا باعث ایجاد خطا خواهد شد.

مرحله دهم:

ست کردن خواص اشیاء

حال که دو شیء مجزا از کلاس person را با نام‌های mojtaba$ و miaad$ ساختیم، می‌توانیم پروپرتی‌های آن‌ها را نیز با استفاده از متدهای داخلی کلاس person که پیش از این ایجاد کرده بودیم، تنظیم کنیم.

لطفا به یاد داشته باشید که هر دو شیء mojtaba$ و miaad$ از یک کلاس مشابه ساخته شده‌اند، با این وجود پی‌اچ‌پی این دو را به عنوان دو شیء متفاوت می‌شناسد. به کد زیر توجه کنید:

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;
$mojtaba->set_name(“mojtaba bolhasani”);
$miaad->set_name(“miaad baferasat”);
?>

مرحله یازدهم:

دسترسی به داده‌های شیء‌ها

حال ما از متدهای دریافت‌کننده استفاده می‌کنیم تا به داده‌هایی که در شیء‌های خود داریم، دسترسی داشته باشیم. این داده‌ها همان اطلاعاتی هستند که با استفاده از متدهای تنظیم‌کننده (ست‌کننده) در اشیاء ایجاد شده (mojtaba$ و miaad$) ذخیره کردیم.

هنگام دسترسی به متدها و پروپرتی‌های یک کلاس باید از عملگر <- استفاده کنیم. به کد زیر با دقت نگاه کنید.

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;

$mojtaba->set_name(“mojtaba bolhasani”);
$mihaad->set_name(“miaad baferasat”);

echo “mojtaba’s full name: ” . $mojtaba->get_name();
echo “miaad’s full name: ” . $miaad->get_name();
?>

نکته: توجه داشته باشید که عملگر <- در اینجا به عملگر <- در آرایه‌ها شباهتی ندارد.

 شما تا به این لحظه، نیمی از مسیر یادگیری مبحث شیءگرایی را در پی‌اچ‌پی آموخته‌اید. بهتر است کمی استراحت کرده و سپس مباحث این جلسه و جلسه قبل را با دقتی بیشتر برای خود مرور کرده و آن‌ها را با استفاده از سرور مجازی Xampp بر روی رایانه شخصی خود تست کنید تا آموخته‌های خود را تثبیت کرده و شیءگرایی را بهتر درک کنید. بد نیست اشاره کنیم که شما در همین دو جلسه

  • یک کلاس پی‌اچ‌پی طراحی کردید
  • چندین شیء را براساس کلاس ساخته شده خود ایجاد کردید
  • داده‌های موردنظرتان را در اشیاء ساخته شده وارد کردید
  • به داده‌های موردنیاز در اشیاء ساخته شده دسترسی پیدا کردید

تا همین‌جا شما پایه و اساس شیءگرایی را در پی‌اچ‌پی فراگرفته‌اید. در جلسه‌ی بعدی ادامه مبحث شی‌ءگرایی را در زبان برنامه‌نویسی PHP می‌گیریم.

برای تمرین سعی کنید یک کلاس دیگر بسازید که همانند آنچه در این دو جلسه ایجاد کردیم شامل متدها و پروپرتی‌های خاص خود باشد.

 منبع: زومیت

آموزش PHP – جلسه بیست و یکم: شیء گرایی

در ادامه سری آموزش‌های پی‌اچ‌پی در وبلاگ مهرآستان، حال به مرحله‌ای جدید از برنامه‌نویسی می‌پردازیم و در واقع قصد داریم وارد مباحث پیشرفته شویم. در این جلسه و چند جلسه‌ی آینده، به مبحث شیء‌گرایی خواهیم پرداخت. در ادامه‌ با ما همراه شوید.

شاید سخت‌ترین مرحله در تدریس و نیز فراگرفتن شیء‌گرایی در پی‌اچ‌پی را بتوان پایه و اساس آن دانست. اما در صورتی‌که شما اصل این مفاهیم پایه را بیاموزید، یادگیری ادامه‌ی این مبحث بسیار آسان خواهد شد. در هرصورت جای نگرانی وجود ندارد و ما نیز در این آموزش از آسان‌ترین راه موجود استفاده خواهیم کرد تا مفاهیم شی‌ء‌گرایی (OOP) را به‌طور کامل و صحیح یاد بگیرید.

۶۸a3310b-b292-4c62-97a9-78a494ae332f.jpgبه جای یادگیری تئوری که در اکثر آموزش‌ها از آن استفاده شده، ما مستقیما مثل جلسات قبل شما را درگیر کدنویسی می‌کنیم تا همراه با یادگیری مطالب بتوانید کدهای موردنیاز را به صورت عملی نیز بنویسید. برای این‌که اشتیاق شما به مبحث شی‌ء‌گرایی بیشتر شود جالب است بدانید که پس از یادگیری این بخش، برنامه‌نویسی به زبان پی‌اچ‌پی برای شما بسیار لذت‌بخش‌تر و آسان‌تر و مسنجم‌تر خواهد شد. پس مثل همیشه برنامه‌ی نوت‌پد پلاس‌پلاس را اجرا کنید و هم‌زمان با توضیحاتی که می‌خوانید، کدهای موردنیاز را بنویسید.

مقدمه

با انتشار پنجمین نسخه از PHP در سال ۲۰۰۴، برنامه‌نویسان این زبان در نهایت امکان بهره بردن از قدرت برنامه‌نویسی شی‌ءگرا را به دست آوردند. این همان قدرتی است که زبان‌های دیگری چون جاوا و سی، آن را از قبل در اختیار توسعه‌دهندگان قرار داده بودند. 

در این سری آموزشی قصد داریم تا به صورت گام به گام، شما را با نحوه ساختن اشیاء در پی‌اچ‌پی و نیز استفاده کردن از آن‌ها آشنا کنیم. تمام این کارها با قابلیت‌های درونی OOP پی‌اچ‌پی امکان‌پذیر هستند و نیاز به هیچ مورد اضافه‌ی دیگری ندارید. در ادامه، خلاصه‌ای از آنچه فرا خواهید گرفت را مشاهده می‌کنید.

  • تفاوت بین ساخت یک اپلیکیشن پی‌اچ‌پی با روش معمولی (قدیمی) و روش شی‌ءگرا.
  • اصول OOP چه هستند و چگونه از آن‌ها در پی‌اچ‌پی استفاده کنیم.
  • چه زمانی از OOP در اسکریپت‌های پی‌اچ‌پی خود استفاده کنیم.

برخی از افراد هنگام برنامه‌نویسی بسیار سردرگم می‌شوند چرا که این برنامه‌نویسان احتمالا پایه و اساس مفاهیم را به خوبی یاد نگرفته‌اند. همیشه به این نکته توجه داشته باشید که پایه و اساس هر کار، بخش مهمی از آن کار به حساب می‌آید. با در نظر گرفتن این نکات قصد داریم تا آرام آرام به یکی از کلیدی‌ترین سردرگمی‌هایی که هنگام برنامه‌نویسی شی‌ءگرا با PHP وجود دارد، بپردازیم. با یادگیری این نکات، می‌توانید در آینده به خوبی در دنیای شیءگرایی فعالیت داشته باشید.

دقت داشته باشید که برای یادگیری مبحث OOP باید با مباحث پیش‌نیاز از جمله، توابع، متغیرها، دستورات شرطی و حلقه‌ها آشنایی داشته باشید. اگر با این مباحث آشنا نیستید، به مطالب جلسات قبل مراجعه کنید. برای این‌که یادگیری OOP آسان‌تر شود قصد داریم تا این بخش را در ۲۲ مرحله به شما آموزش دهیم.

مرحله اول:

ایجاد فایل‌های موردنیاز

پیش از هر چیز مثل همیشه نرم‌افزار Xampp را اجرا کرده و یک پوشه جدید در پوشه‌ی htdocs بسازید. در این پوشه دو فایل جدید به نام‌های index.php و class.php را نیز بسازید.

شی‌ء‌گرایی (OOP) به معنای ساختن یک کد ماژولار است و بنابراین کدهای پی‌اچ‌پی شی‌ءگرایی که می‌نویسیم در فایل‌های مخصوص به خود قرار داده می‌شوند و سپس در صفحات پی‌اچ‌پی اصلی خود در مواقع نیاز از کدهای شی‌ءگرای نوشته شده بهره می‌بریم. همان‌طور که در جلسات قبل نیز به شما آموزش دادیم، می‌توان یک صفحه‌ی پی‌اچ‌پی را با دستور include به یک صفحه‌ی دیگر پی‌اچ‌پی اضافه کرد. حال در اینجا ما فایل‌های شیءگرای نوشته شده را به صفحات اصلی پی‌اچ‌پی خود اضافه خواهیم کرد.

محور اصلی برنامه‌نویسی شی‌ءگرا بر ساختارهایی به نام کلاس (class) می‌چرخد. کلاس‌ها قالب‌های کلی برای تعریف اشیاء در برنامه‌نویسی شیءگرا هستند.

مرحله دوم:

ساختن یک کلاس پی‌اچ‌پی در فایل class.php

به منظور طراحی اسکریپت‌های پی‌اچ‌پی خود به جای این‌که چندین تابع، متغیر و کدهای شناور مختلف داشته باشید، بهتر است کتابخانه‌های مخصوص به خود را با روش OOP ایجاد کرده و در واقع کلاس‌های خودتان را تعریف کنید.

برای تعریف کلاس خود باید از کلمه کلیدی class استفاده کنیم و به دنبال آن نامی را که قصد داریم برای کلاس تعیین شود، می‌نویسیم. به مثال زیر دقت کنید.

<?php
class person {
}
?>

نکته: محتوای هر کلاس همانند ساختار توابع، با علامت آکولاد ( { } ) احاطه می‌شود.

مرحله سوم:

کلاس‌ها را می‌توان نقشه‌هایی برای اشیاء پی‌اچ‌پی دانست. یکی از بزرگترین تفاوت‌هایی که بین توابع و کلاس‌ها وجود دارد این است که یک کلاس شامل داده‌ها (متغیرها) و توابع مختلف است. هر یک از توابع موجود در کلاس را یک شیء (object) می‌نامند.

هنگامی که شما بخواهید متغیرهای موردنظر خود را در داخل یک کلاس ایجاد کنید، به این متغیرها خاصیت یا ویژگی می‌گویند. به مثال زیر توجه کنید:

<?php
class person {
var $name;
}
?>

نکته: داده‌ها. متغیرهایی که در داخل یک کلاس تعریف شده‌اند را خواص آن کلاس می‌گویند.

مرحله چهارم:

افزودن توابع‌/متدها به کلاس

همان‌طور که برای افزودن هر متغیر در هر کلاس، باید نام منحصر به فردی را برای آن انتخاب کنیم، برای تعریف کردن توابع نیز باید نامی منحصر به فرد را برای هر تابع انتخاب کنیم. مجددا یادآوری می‌کنیم که هرجا در کلاس‌های پی‌اچ‌پی صحبت از متدها شد منظور از هر متد همان تابع در کلاس است.

از متدهای یک کلاس به منظور اعمال تغییرات در داده‌ها و خواص (متغیرهای کلاس) استفاده می‌کنیم. به مثال زیر توجه کنید:

<?php
class person {
var $name;
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() {
return $this->name;
}
}
?>

نکته: فراموش نکنید که در یک کلاس، متغیرها را Property (مشخصه‌ها یا ویژگی‌ها) می‌نامند و توابع نیز متدهای کلاس خوانده می‌شوند.

مرحله پنجم:

توابع ست‌کننده و دریافت کننده

ما دو تابع (متد) جالب را تعریف کرده‌ایم. یکی get_name() و دیگری set_name().

این متدها از حالت کلی و رایج برنامه‌نویسی شیءگرا (OOP) پیروی می‌کنند و شما می‌توانید این ویژگی را در سایر زبان‌های برنامه‌نویسی که از شی‌ءگرایی پشتیبانی می‌کنند (مثل جاوا و Ruby) نیز مشاهده کنید.

مورد دیگر این‌که توابع ست‌کننده و دریافت‌کننده باید با نام مشخصه‌ای (متغیر) که قصد تغییر آن را دارند، نام یکسانی داشته باشند. به مثال زیر توجه کنید:

<?php
class person {
var $name;
function set_name($new_name) {
$this->name = $new_name;
}

function get_name() {
return $this->name;
}
}
?>

نکته: توجه داشته باشید که نام توابع ست‌کننده و دریافت‌کننده، باید با نام مشخصه‌های مرتبط با آن‌ها یکسان باشد.

با استفاده از این روش، هنگامی که توسعه‌دهندگان پی‌اچ‌پی بخواهند اشیاء شما را مورداستفاده قرار دهند، می‌دانند که اگر تابعی به نام یک متغیر درون کلاسی باشد، آن تابع یا متد به منظور اعمال تغییرات روی آن متغیر به‌کار می‌رود.

در جلسات بعدی به ادامه‌ی مبحث می‌پردازیم.

 منبع: زومیت

آیا استرس باعث تغییر رنگ مو می‌شود؟

سفید شدن رنگ مو با افزایش سن در فرد ایجاد می‌شود. اما استرس در این میان چه نقشی بازی می‌کند؟ آیا استرس مداوم می‌تواند باعث تغییر رنگ موی سر افراد شود؟ با ما همراه باشید.

درباره‌ی نقش استرس در تغییر رنگ مو نظرات زیادی وجود دارد. اگرچه استرس نمود فیزیکی دارد و می‌تواند بر روی بدن نقشی مخرب بازی کند ولی در مورد سفید یا نقره‌ای شدن موهای سر نمی‌توان به طور قطعی نظر داد. محققان می‌گویند که عوامل زیادی روی رنگ مو اثر دارند.

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

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

در جریان افزایش سن اتفاقات زیادی در بدن رخ می‌دهد. یکی از این فرآیندها با نام اکسیداتیو استرس شناخته می‌شود که نوعی آسیب بافتی-سلولی بوده و در تمامی سلول‌ها با افزایش سن رخ می‌دهد. اما نقش استرس‌های هیجانی در این میان چیست؟ آیا استرس‌ هیجانی توانایی سرعت بخشیدن به اکسیداتیو استرس را دارد؟

برای رسیدن به جواب باید یک گروه آزمایش شکل داد که به افراد گروه استرس‌های مداوم و مصنوعی وارد کرد. مسلما این آزمایش به دلیل مسائل اخلاقی امکان‌پذیر نیست و در نتیجه نمی‌توان خیلی دقیق به جواب سوال بالا رسید.

در تحقیقات گذشته می‌توان نشانه‌هایی از تاثیر استرس‌ در روند اکسیداتیو پیدا کرد. این نشانه‌ها آنقدر محکم نیستند که بتوان ادعا کرد استرس بر روی تغییر رنگ مو تاثیرگذار است. در حقیقت استرس بیشتر منجر به ریزش مو خواهد شد، بین استرس و تغییر رنگ مو ارتباط محکمی وجود ندارد.

بنابراین اگر موهای شما زود و در هنگام جوانی نقره‌ای رنگ شده عوامل دیگری جز استرس در آن نقش داشتند. استرس مشکلات متفاوت‌تری را برای مو‌ ایجاد می‌کند. بیشتر تحقیقات تاثیر استرس بر روی فرآیندهای بیولوژیکی را مورد مطالعه قرار داده‌اند که در نهایت باعث ریزش مو می‌شود.

در همین حال مطالعه‌ای از دانشگاه هاروارد در سال ۲۰۰۷ نشان می‌دهد افرادی که به‌طور مداوم در موقعیت‌های استرس‌زا قرار گرفته‌اند روند تغییر رنگ موی آن‌ها نیز با سرعت بیشتری پیش رفته است. استرس باعث آزادسازی رادیکال‌های آزادی می‌شود که در کار تولید ملانین‌ها تداخل ایجاد می‌کنند. این مطالعه به دلیل کوچک بودن جامعه‌ی آماری نمی‌تواند رابطه‌ای قطعی را نشان دهد.

همچنین اوایل سال جاری دانشمندان بریتانیایی ژن IRF4 را کشف کردند که مرتبط با موهای نقره‌ای است، بنابراین بعضی از افراد بیشتر در معرض تغییر رنگ مو به سمت نقره‌ای هستند.

در این بین نباید عوامل محیطی را جدا دانست و تنها به یک عامل بسنده کرد. عواملی چون مصرف دخانیات، آلودگی‌های محیطی و تغذیه‌ی ناسالم از جمله عواملی هستند که اگرچه رابطه‌ی آن‌ها با تغییر رنگ مو بهطور کامل به اثبات نرسیده اما می‌توانند اثرات مخربی بر روی سلامت پوست و مو داشته باشند.

 منبع: زومیت