آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آموزش زبان های برنامه نویسی

آشنایی با زبان PHP

 

ادامه ی آشنایی با زبان پی اچ پی

 اشتباه! قانون ما این بود که هیچ رنگی غیر از قرمز و آبی و سبز ساخته نشود. خوب معلومه آخر عاقبت اداره کردن مستقیم colour property همینه دیگه! اتومبیل موند رو دستمون.  چون ما یک interface برای مراقبت از مسوولیت ها ایجاد نکردیم. در لیست 1 مثال بهتری را خواهید یافت.

 لیست 1 

<?php
        class Car
        {
        var $color;
        var $possibleColors = array("red", "green", "blue");

        function setColor($color)
        {
        if (in_array($color, $this->possibleColors)) {
        $this->color = $color;
        }
        }
        }
        
        $specificCar = new Car();
        $specificCar->setColor("yellow"); //would not alter the object

        $specificCar->setColor("red"); //would alter the object
        ?>


سعی کنید که این کد را درک کنید و اینکه چرا این راه بهتر است، این بار اتومبیل ما یک interface دارد که ما از طریق این interface می توانیم مقادیر propertiesرا تغییر دهیم، متد setColor مراقب هست که چه اتفاقاتی ممکن است برای properties اتومبیل بیفتد. اگر interface امان را خوب بنویسیم، می توان مطمئن بود که اگر به غلط هم مقداردهی شود اتفاق بدی برای properties نخواهد بود و interface مراقب اوضاع خواهد بود. متدsetColor اصلاح کننده(modifier) نام دارد وproperty شئ اتومبیل را اصلاح می کند. در کنار اصلاح کننده، accessor ها را داریم. accessor برای برگرداندن property بجای اصلاح آن بکار می رود.
لیست 2 مثالی برای accessor را نشان می دهد.

لیست 2

 

<?php
class Car
{
var $color;

/*
* constructor, code inside this function is executed on object
* initialisation
* note that in PHP 5 the constructor will have to have the name
* __construct(), instead of the class name
* although this way of constructing will still work as long as no
*___construct() is found
*/
function Car()
{
$this->color = "red";
}

// Accessor
function getColor()
{
return $this->color;
}
}
?>


 
در لیست 2 متد getColor همان accessor است. accessor ها همچنین می توانند داده را قبل از برگرداندن اداره کنند. همیشه بهتر است که بجای ارجاع مستقیم به property های داخلی یک شئ از accessor ها استفاده کنیم. حالا می دونم بعضی از شما می پرسید که "من واقعأ نمی تونم property های شئ را مستقیمأ اداره کنم؟"
 
درسته. وقتی این مقاله نوشته می شد php هنوز فاقد اصلاح کننده هایی مثل private بود. هرچند این موضوع در php5 تغییر خواهد کرد شما می توانید محدودیت های سر سختی برای قسمت های خصوصی خودتان بگذارید تا خیالتان راحت باشد که بهیچ وجه دستکاری نمی شوندخیلی مهم است که رفتار شئ شما بخوبی از طریق interface یا متدها تعریف شده باشد. چون خیلی مهم است که یک interface خوب در موقع استفاده دوباره هم خوب باشد، باید واضح باشد که یک شئ چکار می کند. همیشه سعی کنید اسامی برای کلاسها انتخاب کنید که کار اون کلاس را بطور خلاصه بیان کند. از نوشتن اسامی بلند نترسید در مجموع کپسوله کردن یعنی:

 اشیاء جزئیات را برای خودشون نگه دارند

 یک شئ فقط باید چیزی را ارائه کند که لازم است

 یک شئ مسوولیت های خودش را دارئ

 یک شئ باید interface واضحی داشته باشد

کلاسها در PHP

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

تا اینکه چند روز پیش هنگامی که داشتم یک Function‌ ساده می نوشتم و اون رو تغییر می دادم به ذهنم رسید که ببینم می شود این کار را توسط یک Object ( شیء )‌ انجام داد یا نه . سعی می کنم نتایجی رو که در هنگام این کار بهش رسیدم رو براتون به زبان ساده شرح بدم .

Class (‌کلاس)‌ در حقیقت تعدادی از Variable ( متغیر)‌ها به همراه تعدادی Function (‌عملگر)‌است که این عملگر ها بر روی آن متغیر ها کار می کنند . اونها در حقیقت مفهوم یک چیز در دنیای واقعی هستند . به عبارت دیگر کلاسها یک شیء رو معرفی می کنند . نشانه یک کلاس زندگی واقعی و یا نفس کشیدن است که زیرساختهای اون کلاس هستند .

فرض کنید که ما می خواهیم یک دوچرخه را شرح دهیم . کلاس مرتبط با یک دوچرخه می بایست متغیر های زیر را داشته باشد :‌

 


$pedals, $chain, $front_wheel, $rear_wheel, $brakes, $handle_bars

 

)بدنه نگهدارنده ، ترمزها ، چرخ عقب ،‌چرخ جلو ، زنجیر ، پدالها )

عملگر هایی که یک دوچرخه دارد از قرار زیر است :


Stop(), Accelerate(), Coast(), TurnLeft(), TurnRight()

 

( ایستادن ، شتاب دادن ، راندن ، پیچیدن به سمت راست ، پیچیدن به سمت چپ )

شما هم اکنون می توانید فرض کنید کنید که توسط این اجزاء این دوچرخه می تواند حرکت کند و در حقیقت معنای دوچرخه بدهد . مثلا عملگر Accelerate می تواند متغیری به عنوان $Braking_Force به عنوان ورودی دریافت کند و مثلا از متغیرهای $brakes و $wheels هم استفاده کند و مثلا نتیجه مطلب را به عنوان مقدار بازگشتی به برنامه برگرداند .

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

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

راه حل موجود استفاده از یک کلاس PHP برای تنظیم خروجی های HTML است . من این کلاس رو Style نامگذاری می کنم . این کلاس شامل متغیرهای زیر است که مهمترین تنظیمات HTML خروجی از برنامه می باشند :

 

 


<?php
class Style {
var $text;
  var $alink;
  var $vlink;
  var $link;
  var $bgcol;
  var $face;
  var $size;
  var $align;
  var $valign;
}
?>

 

مطمئن هستم که شما با HTML آشنا هستید و این متغیرها برای شما آشنا هستند . هم اکنون سعی می کنم که عملگری به نام Style برای تعیین نوع خروجی درست کنم :

 

 


<?php
class Style {
function Style ($text="#000000",$alink="#AA00AA",
  $vlink="#AA00AA",$link="#3333FF",
  $bgcol="#999999",$face="Book Antiqua",$size=3,$align="CENTER",$valign="TOP")
  {
$this->text=$text;
  $this->alink=$alink;
  $this->vlink=$vlink;
  $this->link=$link;
  $this->bgcol=$bgcol;
  $this->face=$face;
  $this->size=$size;
  $this->align=$align;
  $this->valign=$valign;
}
}
  ?>

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

<?php $Basic = new Style; ?>

در اینجا شما شیء‌ ای با نام $basic توسط دستور new از نوع کلاس Style درست کرده اید .

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

<?php
Function Set($varname,$value) {
$this->$varname=$value;
}
?>

بنابراین برای تغییر مقدار هر یک از متغیر ها می توانیم از نمونه زیر استفاده کنیم :


<?php $Basic->Set('size','2'); ?>

شما می توانید از علامت -> برای اشاره به متغیر و یا عملگر یک شیء استفاده کنید . بنابراین خط بالا به اجرا کننده برنامه می گوید که عملگر Set مربوط به شیء $Basic را اجرا کن . از آنجایی که ما $Basic را قبلا از نوع Style تعریف کردیم بنابراین عملگر Set این کلاس اجرا می شود و پارامتر های ورودی شما را می گیرد و
برای شیء مورد درخواست تغییرات لازم را اجرا می کند . همچنین شما می توانید این کار را برای متغیر های دیگر مانند $Basic->text نیز انجام دهید و مقدار اولیه آنرا تغییر دهید .

نظرات 1 + ارسال نظر
رضا شنبه 14 بهمن‌ماه سال 1385 ساعت 09:19 ب.ظ http://-

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

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد