کلاس ها (Class) و اشیاء (Objects) در PHP - قسمت اول

03 خرداد 1397
درسنامه درس 9 از سری آموزش PHP
php-season-4-2

با مطالعه بخش ۱ از فصل ۴ آموزش زبان برنامه نویسی PHP تا حدودی با مفاهیم Functions یا توابع آشنا شدید. حال در این بخش قصد داریم به صورت مفصل به اشیاء‌ یا Objects بپردازیم.

همانگونه که توابع به عنوان یک ابزار قدرتمند، برنامه نویسی شما را حرفه ای می کنند، اشیاء یا بهتره بگوییم برنامه نویسی شیء گرایی PHP نرم افزار شما را بسیار توسعه پذیر خواهد کرد.

یک مثال ارائه می دهیم:

فرض کنید میخواهید یک وب سایت شبکه اجتماعی مانند فیس بوک تولید کنید. اگر از توابع استفاده کنید پس از مدتی که پروژه شما بزرگ شد قطعا توابع گسترده ای نوشته شده که به هنگام توسعه هر یک باید مدت ها زمان بگذارید تا بدانید هر یک از توابع دقیقا چه کاری را انجام می دهند. حال در نظر بگیرید یک تابع اطلاعات کاربران را بر می گرداند. مثلا تابع currentUser. اگر بخواهیم اطلاعات کاربران را با رفتار اشیاء یا شیء در اختیار سیستم قرار دهیم کافیست یک نمونه از کلاس User برای کاربر مثلا x به عنوان یک شیء ایجاد کرده و سپس ویژگی های آن را توسعه دهیم. اصلا دچار نگرانی نشوید، مفهوم کلاس و اشیاء را به صورت کامل توضیح خواهیم داد.

اصطلاحات شیء گرایی

  • وقتی می خواهید یک شیء ایجاد کنید باید ابتدا داده های آن شیء را مقداردهی کنید که این کار در محیطی به نام کلاس (Class) رخ می دهد.
  • هر شیء جدید که از کلاسی ساخته می شود تحت عنوان یک instance یا نمونه معرفی خواهد شد.
  • داده های مرتبط با یک شیء، ویژگی یا properties نامیده می شود.
  • توابعی که داخل کلاس ها تولید می شوند و برای اشیاء ساخته شده از آن کلاس در دسترس هستند، متد یا method نامگذاری خواهند شد.

شیء گرایی در PHP

برای روشن تر شدن این اصطلاحات یک مثال ارائه می دهیم. فرض کنید شما یک ماشین دارید (در اینجا ماشین همان کلاس Car است). این ماشین به رنگ قرمز و از نوع شاسی بلند است (در این بخش رنگ و نوع به عنوان ویژگی یا properties مطرح می شوند). اگر وضعیت ماشین را روی حالت رانندگی خودکار قرار دهید بدون وجود راننده می توانید آن را هدایت کنید (در اینجا فشردن دکمه رانندگی خودکار نقش متد یا method را دارد).

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

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

تعریف کلاس در PHP

قبل از اینکه یک شیء تولید کنید باید کلاس آن شیء را تعریف نمایید. برای تعریف کلاس در زبان PHP از کلمه کلیدی class استفاده می شود.

کلاس ها به بزرگ و کوچک بودن حروف حساس هستند. در مثال زیر یک کلاس به نام User تولید کرده (معمولا کلاس ها را با حروف بزرگ نام گذاری می کنند) و سپس یک شیء از آن می سازیم:

<?php
	// تعریف کلاس User
	class User
	{
		public $name, $password;
		function save_user()
			{
				echo "Save User code goes here";
			}
	}
	// ساخت یک شیء از کلاس User
	$object = new User;
	print_r($object);
?>

در این مثال ابتدا یک کلاس با نام User ایجاد کرده ایم که شامل دو ویژگی به نام های name و password است.

این ویژگی ها از نوع public (عمومی و قابل دسترس در تمام بخش های برنامه) تعریف شده اند. سپس یک متد به نام save_user را (مشابه توابع) تعریف می کنیم. در نهایت شیء object را از روی کلاس User با دستور new User ایجاد کرده و در خروجی نمایش می دهیم.

تعریف شیء در PHP

برای تعریف اشیاء در PHP کافیست نام کلاس را به همراه کلمه new بکار ببرید:

$object = new User;

حال برای دستیابی به ویژگی های کلاس و مقدار دهی آنها باید به صورت زیر عمل کنید:

$object->name = "Joe";
$object->password = "mypass";

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

$object->save_user();

با این کار یک شیء از کلاس User به نام object ساخته شد. سپس مقادیر نام و رمز عبور این شیء مشخص و در نهایت با متد save_user پیام Save User code goes here نمایش داده شد.

سازنده ها (Constructors) در PHP

سازنده ها در کلاس ها به عنوان اولین متدی معرفی می شوند که به محض ساخت یک شیء از روی آن کلاس به صورت خودکار فراخوانی خواهند شد.

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

<?php
	class User
	{
	function __construct($param1, $param2)
		{
			// Constructor statements go here
			public $username = "Guest";
		}
	}
?>

اگر در این مثال یک شیء از کلاس User ساخته شود. در ابتدا نام کاربری آن برابر Guest خواهد بود. زیرا سازنده این کلاس این مقداردهی را درون construct انجام داده است.

مخرب ها (Destructors) در PHP

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

<?php
	class User
	{
		function __destruct()
			{
			// Destructor code goes here
			}
	}
?>

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

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

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (3 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حسن فرجی
07 تیر 1399
سلام ممنون مطالب خوب تون خط سوم غلط املایی دارین (: گفتین :"همانگونه که توابع به عنوان یک ابزار قدرتمند، برنامه نویسی شما را حرفه ای می کنند، اشیاء یا بهره بگوییم" بهره بگویم باید بشه بهتره بگیویم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
08 تیر 1399
سپاس از نظر ارزشمند شما. این پست ویرایش شد.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

reza
08 آذر 1398
با سلام آموزش های php سایت شما قابل فهم هست که من خیلی دوست دارم از زحمت شما سپاسگذارم موفق باشید

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

فرهنگ
11 مرداد 1397
والا هیچی نفهمیدم :| مثال خیلی ناقصه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.