بایگانی برچسب: s

آموزش 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 – جلسه هفتم: دستور Switch و آشنایی با Include و Require

در این جلسه از آموزش پی‌اچ‌پی  می‌خواهیم در مورد دستورات پایه‌ای نهایی صحبت کنیم. با فراگیری این درس می‌توان ساخت پروژه‌های ساده را آغاز کرد و سپس رفته رفته با ساخت پروژه‌های کاربردی‌تر پیش خواهیم رفت. دستور Switch یکی از دستورات کاربردی و بسیار خوب php است که عملکرد آن در واقع شبیه به if … else if است. در ادامه مطلب با ما همراه باشید.

اگر خاطرتان باشد در جلسات قبل مفصلا در مورد دستور if و نیز else if صحبت کردیم و گفتیم که برای بررسی چند شرط می‌توان از آن استفاده کرد. اما در پی‌اچ‌پی دستور دیگری به نام Switch وجود دارد که کار اصلی‌اش بررسی چندگانه شرط‌ها است. حالت استاندارد استفاده از Switch به صورت زیر است:

<?php
$a = 1;

switch ($a)
{
case “1”:
echo “moteqayer 1 ast”;
break;

case “2”:
echo “moteqayer 2 ast”;
break;

default:
echo “motaqyer 1 va 2 nist”;
break;

}
?>

اگر به کد بالا دقت کنید، ابتدا ما یک متغیر به نام a تعریف کرده‌ایم و مقدار ۱ را به آن نسبت داده‌ایم. سپس دستور Switch را نوشته و در پرانتز مقابل آن نام متغیری که تعریف کرده بودیم را قرار دادیم. سپس به ازای هر شرط از یک دستور case در داخل دستور Switch استفاده کرده‌ایم. تا اینجا ما به پی‌اچ‌پی می‌گوییم که هدف ما بررسی مقدار متغیر a است. سپس هر case مانند یک else if عمل می‌کند و ما به پی‌اچ‌پی اعلام کرده‌ایم در صورتی که مقدار متغیر ۱ باشد عبارت moteqayer 1 ast چاپ شود و اگر مقدار a عدد ۲ بود عبارت moteqayer 2 ast چاپ شود و اگر مقدار a هیچ کدام از مواردی که بررسی شده نبوده، عبارت motaqyer 1 va 2 nist در مرورگر چاپ شود.

اگر کمی در مورد این دستور سردرگم شده‌اید اصلا نگران نباشید. کافی است همان‌طور که اشاره کردیم مثل دستور else if به آن نگاه کنید با این تفاوت که در دستور switch بررسی شروط به صورتی است که در بالا مشاهده می‌کنید و از انسجام بهتری برخوردار است. بسیاری از توسعه‌دهندگان PHP پیشنهاد می‌کنند که اگر در کدنویسی نیاز به بررسی چندین شرط دارید، بهتر است از Switch استفاده کنید چراکه در چنین شرایطی، استفاده از else if برای بررسی شرط‌های زیاد، نسبت به Switch بهینه نیست.

خب پس اصول کلی استفاده از Switch را به صورت خلاصه اگر بخواهیم اعلام کنیم به صورت زیر خواهد بود:

  1. قرار دادن آنچه قصد بررسی مقدارش را داریم (متغیر یا دستوراتی که نهایتا یک خروجی داشته باشند) در پرانتز مقابل دستور Switch
  2. به ازای هر شرط یک دستور case را نوشته و علامت دو نقطه “:” را در مقابل آن می‌نویسیم.
  3. کد مورد نظر برای شرطی که در مرحله قبل نوشتیم را می‌نویسیم.
  4. با استفاده از عبارت break و سپس قرار دادن علامت نقطه ویرگول ; شرط یاد شده را پایان می‌دهیم.
  5. به ازای هر شرط دیگری که قصد بررسی آن را داریم مراحل ۲ تا ۴ را مجددا تکرار می‌کنیم.
  6. همانند مثال بالا، در نهایت شرط Case default را در پایین‌ترین بخش دستور switch می‌نویسیم تا در صورتی که هیچ کدام از شرط‌های نوشته شده برقرار نبود، این دستور اجرا شود.

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

<?php
$userCity = 20;

switch ($userCity)
{
case “tehran”:
echo “welcome you are from tehran!”;
break;

case default:
echo “you are not from tehran!”;
break;

}
?>

همان‌طور که مشاهده می‌کنید ابتدا متغیر userCity را تعریف و مقداردهی کرده‌ایم. در صورتی که مقدار این متغیر را tehran تعیین کنیم، شرطی اولی که در switch نوشته‌ایم برقرار خواهد بود و در نتیجه عبارت welcome you are from tehran! برای وی نمایش می‌یابد و در غیر این صورت you are not from tehran! را مشاهده می‌کنید. دقت کنید که نوشتن بخش default اجباری نیست ولی به شما پیشنهاد می‌کنیم که در پروژه‌های خود حتما این بخش را هم بکار ببرید چراکه باعث کنترل بهتر شرایط خواهد شد.

معرفی Include و require

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

با استفاده از include می‌توانید محتویات یک فایل دیگر را در فایل مورد نظر خود اضافه کنید. در پوشه htdocs نرم‌افزار سرور مجازی xampp یک پوشه جدید به نام mysite ایجاد کنید. در این پوشه سه فایل پی‌اچ‌‌پی به نام‌های head.php و index.php و footer.php ایجاد کنید. ساختار پروژه شما باید شبیه به زیر باشد:

fac133b1-73e4-4031-b779-b997fa825bb0

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

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

در این صورت ساختار پروژه ما از انسجام بیشتری برخوردار خواهد شد و توسعه و عیب‌یابی آن هم بسیار آسان‌تر می‌شود. اما برگردیم به سراغ پروژه mysite. پس از ایجاد سه فایل یاد شده، ابتدا فایل head.php را باز کنید و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html>
<style>
#header {
background-color:black;
color:white;
text-align:center;
padding:5px;
}
#section {
padding:10px;
}
#footer {
background-color:black;
color:white;
clear:both;
text-align:center;
padding:5px;
}
</style>
</head>
<body>

<div id=”header”>
<h1>My Site</h1>
</div>

سپس فایل index.php را باز کرده و کد زیر را هم در این فایل قرار دهید:

<?php
include (“head.php”);
?>
<div id=”section”>
<h2>Mehrastan PHP Tuts</h2>
<p>we learning php in mehrastan weblog. php is very powerful for developing any kind of web applications. so we love it!</p>
</div>
<?php
include (“footer.php”);
?>

همان‌طور که احتمالا متوجه شده‌اید ما در بالا و پایین کد فایل index.php دو دستور ساده پی‌اچ‌پی را بکار برده‌ایم. در بالا کد با دستور include فایل head.php را به ابتدای فایل اضافه کرده‌ایم. و در پایین نیز فایل footer.php را به کد اضافه می‌کنیم. در این صورت هر تغییری که در فایل‌های head.php یا footer.php اعمال کنید، در فایل index.php نیز همان تغییرات اعمال خواهد شد.

در نهایت کدهای زیر را در هم در فایل footer.php قرار دهید:

<div id=”footer”>
Copyright © mehrastan.ac.ir
</div>
</body>
</html>

حالا مرورگر خود را باز کرده و این پروژه را در مرورگر تست کنید. اگر طبق مراحل به‌درستی پیش رفته باشید آدرس این پروژه در سرور محلی Xampp شما http://127.0.0.1/mysite/index.php خواهد بود. اگر این آدرس را اجرا کنید می‌توانید نتیجه نهایی را که باید چیزی شبیه به عکس زیر باشد، مشاهده کنید:

۲۹a0da34-1929-4b11-8bee-3b1e5aa519feحالا در مرورگر خود روی صفحه راست کلیک کرده و View Source را انتخاب کنید. در این صورت کد سورس نهایی تولید شده توسط پی‌اچ‌پی در واقع ترکیبی از سه فایلی است که ما ایجاد کردیم. یعنی در فایل index.php به جای دستور include همان فایلی که فراخوانی کردیم به آن بخش از کد اضافه شده است.

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

روش استفاده از این دستور دقیقا مشابه include است. به عنوان مثال در پروژه بالا اگر بخواهیم فایل head.php را با require به فایل index.php اضافه کنیم باید دستور را به شکل زیر بکار ببریم:

<?php
require (“head.php”);
?>

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

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

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