
آموزش برنامه نویسی PHP-جلسه پانزدهم
یک کلاس با کلمه کلیدی class و در ادامه نام کلاس تعریف میشود.
Table of contents [Show]
- 1 Classes و Objects در PHP چیست؟
- 2 Class در PHP چیست؟
- 3 Syntax یا ساختار Class در PHP
- 4 Properties در PHP چیست؟
- 5 Methods در PHP چیست؟
- 6 تفاوت Property و Method
- 7 public در Class چیست؟
- 8 $this در PHP چیست؟
- 9 چرا از $this استفاده میکنیم؟
- 10 تعریف متد set_name
- 11 تعریف متد get_name
- 12 Object در PHP چیست؟
- 13 ایجاد Object با new
- 14 ساخت چند Object از یک Class
- 15 تفاوت Class و Object
- 16 دسترسی به Propertyهای Object
- 17 دسترسی به Methodهای Object
- 18 یک مثال کامل از Class و Object
- 19 ایجاد چند Object با اطلاعات متفاوت
- 20 آیا تغییر یک Object روی Object دیگر تأثیر میگذارد؟
- 21 مقداردهی مستقیم Property یا استفاده از Method؟
- 22 یک مثال کاربردیتر؛ کلاس User
- 23 Class و Object چه مشکلی را حل میکنند؟
- 24 مزایای استفاده از Classes و Objects در PHP
- 25 تفاوت برنامهنویسی رویهای و شیگرا
- 26 نکات مهم هنگام نامگذاری Classها
- 27 جمعبندی
Classes و Objects در PHP چیست؟
برنامهنویسی شیگرا یا Object-Oriented Programming (OOP) یکی از مهمترین مفاهیم در PHP است. در برنامهنویسی شیگرا، به جای اینکه تمام کدهای برنامه را به صورت پراکنده بنویسیم، اطلاعات و رفتارهای مرتبط با یک موضوع را در قالب Class و Object سازماندهی میکنیم.
برای مثال، اگر بخواهیم در یک برنامه اطلاعات میوهها را مدیریت کنیم، میتوانیم یک کلاس به نام Fruit ایجاد کنیم. این کلاس میتواند ویژگیهایی مانند نام و رنگ میوه و همچنین متدهایی برای دریافت یا تغییر این اطلاعات داشته باشد.
در این مقاله با مفهوم Class و Object در PHP، نحوه تعریف ویژگیها و متدها، کاربرد $this، ساخت چندین Object از یک Class، نحوه دسترسی به Properties و Methods و تفاوت Class و Object آشنا میشویم.
Class در PHP چیست؟
Class یا کلاس را میتوان به عنوان یک قالب یا نقشه برای ساخت Objectها در نظر گرفت.
کلاس مشخص میکند Objectهایی که از آن ساخته میشوند چه ویژگیهایی داشته باشند و چه رفتارهایی را بتوانند انجام دهند.
برای مثال، اگر یک کلاس برای میوهها داشته باشیم، میتوانیم مشخص کنیم که هر میوه دارای:
- نام
- رنگ
- قیمت
باشد و همچنین متدهایی برای نمایش یا تغییر این اطلاعات داشته باشد.
ساختار کلی یک Class در PHP به شکل زیر است:
<?php
class Fruit
{
// code goes here
}
?>کلمه class برای تعریف کلاس استفاده میشود و بعد از آن نام کلاس قرار میگیرد.
در PHP، بدنه کلاس داخل آکولاد {} قرار میگیرد.
Syntax یا ساختار Class در PHP
ساختار یک کلاس معمولاً از دو بخش اصلی تشکیل میشود:
- Properties یا ویژگیها
- Methods یا متدها
برای مثال:
<?php
class Fruit
{
// Properties
public $name;
public $color;
// Methods
function set_name($name)
{
$this->name = $name;
}
function get_name()
{
return $this->name;
}
}
?>در این مثال، کلاس Fruit دو ویژگی و دو متد دارد.
Properties در PHP چیست؟
Property یا ویژگی، متغیری است که داخل یک Class تعریف میشود و برای نگهداری اطلاعات مربوط به Object مورد استفاده قرار میگیرد.
برای مثال:
public $name;
public $color;در اینجا دو Property به نامهای name و color داریم.
میتوانیم آنها را برای نگهداری اطلاعات یک میوه استفاده کنیم.
مثلاً:
name → Apple
color → Redبنابراین میتوان گفت Properties اطلاعات یا وضعیت یک Object را نگهداری میکنند.
Methods در PHP چیست؟
Method یا متد، تابعی است که داخل یک Class تعریف میشود و معمولاً برای انجام یک رفتار یا عملیات مربوط به Object استفاده میشود.
برای تعریف متد در PHP از function استفاده میکنیم.
برای مثال:
function set_name($name)
{
$this->name = $name;
}در اینجا متدی به نام set_name داریم که یک نام دریافت میکند و آن را در Property مربوط به Object ذخیره میکند.
همچنین متد دیگری به نام get_name داریم:
function get_name()
{
return $this->name;
}این متد مقدار name را برمیگرداند.
تفاوت Property و Method
یکی از نکات مهم در شروع یادگیری OOP، تشخیص تفاوت Property و Method است.
Property برای نگهداری داده استفاده میشود:
public $name;
public $color;اما Method برای انجام یک عملیات یا رفتار استفاده میشود:
function set_name($name)
{
$this->name = $name;
}به زبان ساده:
Property = اطلاعات Object
Method = رفتار یا کاری که Object انجام میدهد
برای مثال در یک کلاس User میتوانیم داشته باشیم:
public $name;
public $email;و متدهایی مانند:
function login()
{
// login logic
}
function logout()
{
// logout logic
}public در Class چیست؟
در مثالهای بالا قبل از Properties از کلمه public استفاده کردیم:
public $name;
public $color;public یکی از Access Modifierهای PHP است و مشخص میکند Property یا Method از چه محدودهای قابل دسترسی باشد.
وقتی یک Property یا Method را public تعریف میکنیم، امکان دسترسی به آن از خارج کلاس نیز وجود دارد.
برای مثال:
$apple->name;اگر name به صورت public تعریف شده باشد، میتوان از خارج کلاس به آن دسترسی داشت.
در ادامه مباحث OOP میتوان با Access Modifierهای دیگری مانند private و protected نیز آشنا شد.
$this در PHP چیست؟
یکی از مهمترین مفاهیم هنگام کار با Class و Object، متغیر $this است.
$this به Object فعلی اشاره میکند؛ یعنی Objectی که متد در حال اجرا روی آن فراخوانی شده است.
برای مثال:
function set_name($name)
{
$this->name = $name;
}در اینجا:
$this->nameبه Property name مربوط به Object فعلی اشاره میکند.
در طرف دیگر:
$nameپارامتری است که به متد ارسال شده است.
بنابراین این دستور:
$this->name = $name;یعنی مقدار پارامتر $name را در Property name مربوط به Object فعلی قرار بده.
چرا از $this استفاده میکنیم؟
فرض کنید یک کلاس داریم که Property آن name است:
class Fruit
{
public $name;
}اگر بخواهیم داخل یک متد مقدار name مربوط به Object را تغییر دهیم، باید مشخص کنیم منظورمان Property همان Object است.
به همین دلیل از $this استفاده میکنیم:
$this->name = $name;بدون $this، متغیر و Property از یکدیگر قابل تشخیص نخواهند بود.
تعریف متد set_name
حالا متد set_name را بررسی کنیم:
function set_name($name)
{
$this->name = $name;
}این متد یک پارامتر به نام $name دریافت میکند.
سپس مقدار آن را در Property name قرار میدهد.
برای مثال اگر بنویسیم:
$apple->set_name("Apple");مقدار Apple به متد ارسال میشود و در نهایت:
$this->name = "Apple";برای Object مربوط به apple تنظیم میشود.
تعریف متد get_name
متد get_name وظیفه دریافت مقدار Property name را بر عهده دارد:
function get_name()
{
return $this->name;
}در اینجا return مقدار Property را از متد برمیگرداند.
سپس میتوانیم این مقدار را با echo نمایش دهیم:
echo $apple->get_name();Object در PHP چیست؟
اگر Class را یک نقشه یا قالب در نظر بگیریم، Object نمونهای است که بر اساس آن قالب ساخته میشود.
برای مثال:
class Fruit
{
public $name;
public $color;
}این کلاس فقط تعریف میکند که یک Fruit چه ویژگیهایی داشته باشد.
اما زمانی که مینویسیم:
$apple = new Fruit();یک Object واقعی از کلاس Fruit ایجاد کردهایم.
در اینجا:
Fruitنام Class است و:
$appleمتغیری است که Object ایجادشده را در خود نگهداری میکند.
ایجاد Object با new
برای ساخت یک Object از یک Class از کلمه کلیدی new استفاده میکنیم.
ساختار کلی:
$objectName = new ClassName();برای مثال:
$apple = new Fruit();یا:
$banana = new Fruit();در هر دو مورد، Object جدیدی از کلاس Fruit ساخته شده است.
ساخت چند Object از یک Class
یکی از مزیتهای مهم Class این است که میتوانیم از یک کلاس چندین Object مختلف ایجاد کنیم.
برای مثال:
$apple = new Fruit();
$banana = new Fruit();
$orange = new Fruit();هر سه Object بر اساس Class Fruit ساخته شدهاند.
اما هر Object میتواند اطلاعات متفاوتی داشته باشد.
برای مثال:
Apple → Red
Banana → Yellow
Orange → Orangeاین موضوع یکی از پایههای اصلی برنامهنویسی شیگرا است.
تفاوت Class و Object
برای درک بهتر این مفهوم، میتوان Class را مانند یک قالب در نظر گرفت.
مثلاً:
Class: Fruitمشخص میکند هر میوه چه ویژگیها و رفتارهایی داشته باشد.
اما:
Object: Apple
Object: Banana
Object: Orangeنمونههای ساختهشده از آن Class هستند.
بنابراین:
Class → قالب یا نقشه
Object → نمونه ساختهشده از قالب
دسترسی به Propertyهای Object
بعد از ایجاد Object میتوانیم با استفاده از عملگر -> به Propertyها و Methodهای آن دسترسی داشته باشیم.
برای مثال:
$apple->name;یعنی دسترسی به Property name مربوط به Object $apple.
اگر Property عمومی باشد، میتوان مقدار آن را نیز مستقیماً تغییر داد:
$apple->name = "Apple";و سپس:
echo $apple->name;مقدار Apple نمایش داده میشود.
دسترسی به Methodهای Object
برای اجرای یک Method از عملگر -> استفاده میکنیم.
برای مثال:
$apple->set_name("Apple");در اینجا متد set_name برای Object مربوط به $apple اجرا میشود.
برای دریافت مقدار نیز میتوان نوشت:
echo $apple->get_name();یک مثال کامل از Class و Object
حالا تمام مفاهیمی که تا اینجا یاد گرفتیم را در یک مثال قرار میدهیم:
<?php
class Fruit
{
// Properties
public $name;
public $color;
// Methods
function set_name($name)
{
$this->name = $name;
}
function set_color($color)
{
$this->color = $color;
}
function get_name()
{
return $this->name;
}
function get_color()
{
return $this->color;
}
}
$apple = new Fruit();
$apple->set_name("Apple");
$apple->set_color("Red");
echo "Fruit: " . $apple->get_name();
echo "<br>";
echo "Color: " . $apple->get_color();
?>در این مثال:
- کلاس
Fruitایجاد شده است. - دو Property به نامهای
nameوcolorداریم. - برای تنظیم نام و رنگ دو Method ایجاد کردهایم.
- برای دریافت نام و رنگ نیز دو Method داریم.
- یک Object به نام
$appleایجاد شده است. - اطلاعات Object با استفاده از Methodها مقداردهی شدهاند.
- در نهایت اطلاعات Object با
echoنمایش داده شده است.
ایجاد چند Object با اطلاعات متفاوت
حالا میتوانیم از همین Class چند Object مختلف ایجاد کنیم:
<?php
class Fruit
{
public $name;
public $color;
function set_name($name)
{
$this->name = $name;
}
function get_name()
{
return $this->name;
}
}
$apple = new Fruit();
$banana = new Fruit();
$apple->set_name("Apple");
$banana->set_name("Banana");
echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>خروجی:
Apple
Bananaدر این مثال یک Class داریم، اما دو Object مختلف ایجاد کردهایم.
هر Object مقدار مخصوص خودش را دارد.
آیا تغییر یک Object روی Object دیگر تأثیر میگذارد؟
خیر. هر Object نمونه جداگانهای از Class است و Propertyهای خودش را دارد.
برای مثال:
$apple->set_name("Apple");
$banana->set_name("Banana");تغییر نام $apple باعث تغییر نام $banana نمیشود.
بنابراین میتوانیم از یک Class برای ایجاد تعداد زیادی Object با اطلاعات متفاوت استفاده کنیم.
مقداردهی مستقیم Property یا استفاده از Method؟
اگر Property به صورت public تعریف شده باشد، میتوانیم مستقیماً مقدار آن را تغییر دهیم:
$apple->name = "Apple";اما میتوانیم برای این کار از Method نیز استفاده کنیم:
$apple->set_name("Apple");در پروژههای حرفهای، استفاده از Methodها و کنترل دسترسی به دادهها اهمیت بیشتری پیدا میکند؛ بهخصوص زمانی که بخواهیم قوانین یا اعتبارسنجی خاصی هنگام تغییر اطلاعات انجام دهیم.
برای مثال:
function set_price($price)
{
if ($price > 0) {
$this->price = $price;
}
}در این حالت برنامه قبل از ذخیره قیمت، مقدار آن را بررسی میکند.
یک مثال کاربردیتر؛ کلاس User
برای درک بهتر OOP میتوانیم یک مثال واقعیتر بررسی کنیم.
فرض کنید میخواهیم اطلاعات کاربران یک سایت را مدیریت کنیم:
<?php
class User
{
public $name;
public $email;
function set_user($name, $email)
{
$this->name = $name;
$this->email = $email;
}
function get_user()
{
return $this->name . " - " . $this->email;
}
}
$user1 = new User();
$user2 = new User();
$user1->set_user("Ali", "ali@example.com");
$user2->set_user("Sara", "sara@example.com");
echo $user1->get_user();
echo "<br>";
echo $user2->get_user();
?>خروجی:
Ali - ali@example.com
Sara - sara@example.comدر اینجا یک Class برای کاربران ساختهایم و از همان Class برای ایجاد چند کاربر استفاده کردهایم.
Class و Object چه مشکلی را حل میکنند؟
در پروژههای کوچک ممکن است بتوانیم اطلاعات را با متغیرها و توابع معمولی مدیریت کنیم. اما با بزرگتر شدن پروژه، مدیریت تعداد زیادی متغیر و تابع میتواند دشوار شود.
برنامهنویسی شیگرا کمک میکند اطلاعات و رفتارهای مرتبط را در کنار یکدیگر قرار دهیم.
برای مثال به جای داشتن متغیرها و توابع پراکنده برای کاربران، میتوانیم همه چیز را در کلاس User قرار دهیم:
User
├── name
├── email
├── login()
├── logout()
└── updateProfile()این ساختار باعث میشود کدها سازمانیافتهتر، قابل توسعهتر و قابل نگهداریتر باشند.
مزایای استفاده از Classes و Objects در PHP
استفاده از OOP در پروژههای PHP مزایای مختلفی دارد.
کاهش پیچیدگی کد
با تقسیم برنامه به Classهای مختلف، مدیریت بخشهای مختلف پروژه سادهتر میشود.
استفاده مجدد از کد
یک Class را میتوان برای ایجاد تعداد زیادی Object استفاده کرد و لازم نیست برای هر نمونه کد جداگانهای بنویسیم.
سازماندهی بهتر پروژه
اطلاعات و رفتارهای مرتبط در یک ساختار مشخص قرار میگیرند.
توسعهپذیری بیشتر
در پروژههای بزرگ میتوان Classهای مختلف را توسعه داد و از قابلیتهایی مانند Inheritance و Interface استفاده کرد.
نگهداری آسانتر
وقتی ساختار برنامه به شکل منطقی طراحی شده باشد، پیدا کردن و تغییر بخشهای مختلف کد آسانتر خواهد بود.
تفاوت برنامهنویسی رویهای و شیگرا
در برنامهنویسی رویهای، معمولاً اطلاعات و توابع به شکل جداگانه تعریف میشوند:
$name = "Apple";
function get_name($name)
{
return $name;
}اما در OOP میتوانیم اطلاعات و رفتار مرتبط را داخل یک Class قرار دهیم:
class Fruit
{
public $name;
function get_name()
{
return $this->name;
}
}این ساختار در پروژههای بزرگتر میتواند سازماندهی کد را سادهتر کند.
نکات مهم هنگام نامگذاری Classها
برای خوانایی بهتر کد، بهتر است نام Classها معنادار و مرتبط با مسئولیت آنها باشد.
برای مثال:
class User
{
}class Product
{
}class Order
{
}class ShoppingCart
{
}بهتر است از نامهایی استفاده کنیم که با مشاهده آنها بتوانیم متوجه شویم Class چه مسئولیتی دارد.
جمعبندی
Class و Object از پایههای اصلی برنامهنویسی شیگرا در PHP هستند. Class یک قالب برای تعریف ویژگیها و رفتارهای یک موجودیت است و Object نمونهای واقعی است که از روی آن Class ساخته میشود.
در یک Class میتوانیم Properties و Methods تعریف کنیم. Properties برای نگهداری اطلاعات و Methods برای انجام عملیات و رفتارهای مرتبط با Object استفاده میشوند.
برای ساخت Object از کلمه new استفاده میکنیم:
$apple = new Fruit();و برای دسترسی به Propertyها و Methodهای Object از عملگر -> استفاده میکنیم:
$apple->name;یا:
$apple->set_name("Apple");همچنین با استفاده از $this میتوانیم به Object فعلی داخل Class دسترسی داشته باشیم:
$this->name = $name;یکی از مهمترین مزایای OOP این است که میتوانیم از یک Class چندین Object ایجاد کنیم و هر Object اطلاعات مستقل خودش را داشته باشد.
در ادامه مسیر یادگیری OOP در PHP، مفاهیم مهم دیگری مانند Constructor و Destructor، Access Modifierها، Encapsulation، Inheritance، Polymorphism، Interface و Traitها مطرح میشوند. یادگیری Class و Object پایهای ضروری برای درک صحیح این مباحث و ساختار پروژههای حرفهای PHP است.

مریم گوهرزاد
مدرس و بنیانگذار هلدینگ آرتا رسانه. برنامه نویس و محقق حوزه بلاکچین و توسعهدهنده بلاکچین | متخصص Solidity | توسعهدهنده وب Full-Stackمن یک توسعهدهنده علاقهمند به فناوریهای بلاکچین و وب ۳ هستم و در زمینه Solidity، توسعه قراردادهای هوشمند و ساخت برنامههای غیرمتمرکز (DApps) فعالیت میکنم. تمرکز من بر طراحی و پیادهسازی راهکارهایی است که در کنار بهرهگیری از فناوریهای نوین، عملکرد مناسب، امنیت و تجربه کاربری مطلوبی ارائه دهند.در کنار تخصص در حوزه بلاکچین، به عنوان یک توسعهدهنده وب Full-Stack نیز در طراحی و توسعه وبسایتها و برنامههای تحت وب فعالیت میکنم. تجربه کار در بخشهای Front-End و Back-End به من این امکان را داده است که پروژهها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژهای به کدنویسی تمیز، معماری مناسب، طراحی واکنشگرا، عملکرد مطلوب و تجربه کاربری روان دارم.



