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

06 مهر 1397
درسنامه درس 10 از سری آموزش PHP
php-season-4-3

با مطالعه فصل گذشته نحوه تعریف یک کلاس به همراه استفاده از آن را یاد گرفتید. همچنین با مفاهیمی چون Construct ها یا سازنده ها تا حد قابل قبولی آشنا شدید. سپس به تعریف ویژگی ها در یک کلاس پرداختیم. در این جلسه قصد داریم به نحوه کار با متدها (Methods) در کلاس ها اشاره کنیم. اگرچه مثال های ساده ای در ارتباط با متدها ارائه کردیم ولی در این بخش به صورت عمقی به آن می پردازیم.

نوشتن یک متد در زبان PHP

متدها شبیه به توابع هستند اما با کمی تغییرات جزئی. برای مثال در متدها علامت ــ (دو آندرلاین) به عنوان نام های رزرو شده هستند و شما نمی توانید یک متد به صورت مثلا construct__ تعریف کنید!

همچنین یک کلمه ی کلیدی ویژه به نام this$ وجود دارد که برای دسترسی به ویژگی های (Properties) یک کلاس مورد استفاده قرار می گیرد. در مثال زیر یک متد به نام get_password تعریف کرده ایم و درون آن مقدار رمز عبور را بر می گردانیم:

class User
{
	public $name, $password;
	function get_password()
	{
		return $this->password;
	}
}

متد get_password از یک کلمه کلیدی به نام this$ جهت دسترسی به ویژگی password‌ از همان کلاس استفاده کرده است. توجه داشته باشید که برای دسترسی به متد password‌ نیازی به قرار دادن علامت $ نیست. بلکه اپراتور یا عملگر <- جایگزین علامت دلار یا $ می شود. در ادامه برای استفاده از این مثال باید یک شیء به عنوان نمونه از آن تعریف کرده و سپس متد موردنظر را فراخوانی کنیم:

$object = new User;
$object->password = "secret";
echo $object->get_password();

متدهای استاتیک در PHP

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

به مثال زیر توجه کنید:

<?php
	class User
	{
		static function pwd_string()
		{
			echo "Please enter your password";
		}
	}
	User::pwd_string();
?>

در این مثال برای استفاده از متد pwd_string نیازی به ساخت شیء از روی آن کلاس نیست.

تعریف ویژگی ها (Property) در PHP

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

<?php
	class User {}

	$object1 = new User();
	$object1->name = "Alice";
	echo $object1->name;
?

در مثال فوق ابتدا کلاس User را تعریف کرده ایم و چون هیچ ویژگی ای برای آن در نظر نگرفته ایم، میتوانیم ویژگی های جدیدی را خارج از کلاس با استفاده از عملگر <- ایجاد کنیم.

تعریف ثابت ها در PHP

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

<?php
	Translate::lookup();
	class Translate
	{
		const ENGLISH = 0;
		const SPANISH = 1;
		const FRENCH = 2;
		const GERMAN = 3;
		
		static function lookup()
		{
			echo self::SPANISH;
		}
	}
?>

با بررسی مثال فوق متوجه شده اید که ثابت ها را درون یک متد استاتیک با کلمه ی کلیدی self نمایش داده ایم.

اسکوپ (Scope) متدها و ویژگی ها در PHP

اگر به مثال های قبلی توجه کنید با کلماتی مشابه public, protected و private رو به رو می شوید. این کلمات در واقع محدوده ی به کارگیری یک ویژگی یا متد را مشخص می کنند.

public

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

protected

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

private

ویژگی یا متدی که به صورت private تعریف می شود، تنها درون آن کلاس (کلاس اصلی) در دسترس است و در هیچ مکانی قابل استفاده نیست.

ارث بری یا Inheritance در زبان PHP

ارث بری به معنای به ارث بردن یک سری ویژگی ها یا متدها از کلاس پدر توسط کلاس فرزند است.

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

ارث بری در زبان PHP

مثلا فرض کنید یک کلاس به نام User داریم که کلاس پدر نامیده می شود. کلاس فرزند دیگری به نام Contact تعریف می کنیم که تمام متدها و ویژگی های کلاس پدر را به ارث برده است. برای نمایش ارث بری یک کلاس از کلمه کلیدی extends استفاده می کنیم:

<?php
	class User
	{
		public $name, $password;
		function save_user()
		{
			echo "Save User code goes here";
		}
	}
	class Contact extends User
	{
		public $phone, $email;
		function display()
		{
			echo "Name: " . $this->name . "<br>";
			echo "Pass: " . $this->password . "<br>";
			echo "Phone: " . $this->phone . "<br>";
			echo "Email: " . $this->email;
		}
	}
	
	$object = new Contact;
	$object->name = "Fred";
	$object->password = "pword";
	$object->phone = "012 345 6789";
	$object->email = "fred@bloggs.com";
	$object->display();
?>

در این مثال ابتدا یک شیء به نام object‌ از کلاس Contact ایجاد کرده ایم. سپس به مقادیر name و password که در کلاس پدر User تعریف شده است، مقادیر دیگری را اختصاص می دهیم. همانطور که ملاحظه می کنید، تمام ویژگی ها و متدهای کلاس پدر User علاوه بر اینکه در کلاس فرزند Contact‌ در دسترس است، در شیء ای که از کلاس Contact‌ ایجاد شده است، قابل مشاهده می باشد. در نهایت خروجی این مثال به صورت زیر خواهد بود:

Name: Fred
Pass: pword
Phone: 012 345 6789
Email: fred@bloggs.com

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

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

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

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

hasan
07 اردیبهشت 1399
سلام وقت بخیر ی سوال داشتم اموزش پی ااچ پی رو از کجا شروع کنم منظورم همین اموزش متنی تون هست اگه بصورت فصلی جلوو میرفتین خوب بود شایدم داره ولی من نمیدونم اگه ایمیل ببزنید ممنون میشم از مقدماتی ب پیش رفته ممنون

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

ممد نوبریان
14 شهریور 1398
عالی تر از همیشه

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

omid
11 بهمن 1397
سلام این دوره الان تمام شدش و میشه OOP رو دید؟! یا هنوز ادامه داره این آموزش؟

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

نوید خرسند
07 آذر 1397
سلام من ترتیبی که شما گفتین رو تا به اینجا رعایت کردم و خوندم بعد از این باید کدوم قسمت از آموزش ها رو بخونم و دنبال کنم ؟

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

جواد جعفری نیا
12 خرداد 1397
آموزش متنی تون خیلی خوبه امیدوام ادامه پیدا کنه و به بخش های پیشرفته تر برسیم و کلا یه ریفرنس خوب فارسی php داشته باشیم

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