در این قسمت به ساخت یک کلاس بسیار ساده می پردازیم.
بیایید کد یک کلاس Car را ایجاد کنیم . در این مثال شروع به تعریف کلاس خود
میکنیم . این کار را با استفاده از کلمه کلیدی Class در خط دوم میکنیم .
تمرین مهندسی نرمافزار خوبی است تا حرف اول تمامی نامهای کلاسها را برای
تشخیص آنها از متغیرها یا توابع با حروف بزرگ بنویسیم .
برنامهنویسان این کار را برای سالها در زبانهای گوناگون دیگر انجام
دادهاند . شناسایی Constructor در میان متدهای متنوع دیگر در کلاس ساده
است . همچنین عادت خوبی است که نام فایلهایتان را با نام کلاس نامگذاری
کنید . نظیر Car.php یک فایل تنها باید شامل یک کلاس باشد . اگر چند کلاس
دارید که به یکدیگر مرتبط هستند ، نظیر مجموعه کلاسهای انواع داده اصلی ،
باید آنها را درون یک زیرادایرکتوری تحت برنامه کاربردی اصلی خود قرار دهید
. اگر روی یک پروژه عظیم کار میکنید ، این تمرین ضروری است .
با بزرگتر شدن سیستمها ، ضروری
خواهد بود که از یک ساختار دایرکتوری درخت مانند ، برای نگهداری تمامی
کلاسهایی که در برنامه کاربردی وب شما بکار میروند ، استفاده کنید . شما
باید از include_once() یا require_once() برای اضافه کردن کلاسها به
فایلهای سورس خود در هنگام نیاز به آنها استفاده کنید .
PHP Code:
<? Php
// Car.php
class Car
{
در یک مدل بینهایت ساده از یک اتومبیل ، کلاس شامل موتور و نمایش
کلیدی برای روشن کردن اتومبیل است . یک اتومبیل واقعی باید یک بدنه ، یک
پدال گاز و یک ترمز و یک چرخ ، گیربکس و غیره داشته باشد ، اما این تنها
برای نمایش است :
PHP Code:
var $engine ;
var $requiredkey;
اتومبیل ما همچنین یک constructor دارد که موتور آن را تنظیم میکند و
کلیدی دارد که اتومبیل را روشن میکند . اگر این عناصر اتومبیل را شناسایی
نمیکردیم ، هر فراخوانی start() و stop() از کار میایستاد و خطاهایی را
بر میگرداند . چنانکه قبلاً ذکر کردیم ، وظیفه constructor شناسایی تمامی
عناصر شیء ، جهت کسب اطمینان از امکان استفاده از تمامی سرویسها در هنگام
نیاز است .
توجه داشتهباشید که اگر میخواهید به یک عضو کلاس رجوع کنید ، باید یک
کلمه کلیدی $this-> را در ابتدای نام عضو قرار دهید . این ارتباط از
جاوا یا C++ متفاوت است که در آنها اختیاری است . این بدلیل کارایی ضعیف
PHP ، سه سطح namespace وجود دارند که متغیرها در آن مرتب میشوند . (یک
namespace اصولاً مجموعهای از نام متغیرها است).
پایینترین سط ح namespace برای متغیرهای محلی درون توابع یا متدها بکار
میرود . هر متغیر ایجاد شده در این سطح به namespace محلی اضافه شده است .
namespace بعدی حاوی تمامی اعضای یک شیء است . بالاترین سطح namespace
برای متغیرهای عمومی بکار میرود . کلمهه کلیدی $this به PHP میگوید که
متغیر را از namespace شیء میخواهید (سطح وسط) . اگر فراموش کنید که کلمه
کلیدی $this را لحاظ کنید ، یک متغیر کاملاً جدید را در namespace محلی
ایجاد خواهید کرد . از آنجایی که این به یک متغیر کاملاً متفاوت از آنچه که
قرار بود رجوع میکند ، چند خطای منطقی که اشکال زدایی آنها دشوار است را
خواهید داشت .
اطمینان پیدا نماید که گزارش خطا را
فعال میکنید ، که در فصل بعدی مورد بحث قرار گرفته است ، و چند assertion
را برای محافظت از این خطای رایج در هنگام توسعه کلاسهایتان اضافه کنید .
متد start() اتومبیل را با استفاده از key برای کاربر روشن خواهد کرد . اگر
key صحیح باشد ، آبجکت اتومبیل به موتور خواهد گفت تا شروع به کار کند :
PHP Code:
// Constructor
function Car()
{
$this-> requiredkey();
$this->engine= new Engine() ;
}
function start ($Key)
{
if ($key->equals($this->requiredKey)) {
$this->engine->start();
return true ;
}
return false ;
}
متد stop() ساختاری مشابه متد start() دارد . این متد بررسی میکند
تا ببیند آیا موتور روشن است یا خیر ، و اگر روشن باشد ، اتومبیل را متوقف
خواهد کرد . توجه کنید که چک کردن موتور برای اطمینان از روشن بودن آن
میتوانست در تابع stop() آبجکت engine صورت گیرد ، تا ما راحتی از فکر
کردن درباره آن باز دارد . از خودتان سؤال خواهید کرد که منطق(logic) در
کجا بکار خواهد رفت . این ، پایههای توسعه معماری خوب و موفق است :
PHP Code:
function stop ()
{
if ($this->engine->isRunning()) {
$this->engine->stop() ;
}
}
// … Several other methods such as moving and turning , and so on .
}
?>