آموزش برنامه نویسی PHP-جلسه پانزدهم

آموزش برنامه نویسی PHP-جلسه پانزدهم

یک کلاس با کلمه کلیدی class و در ادامه نام کلاس تعریف می‌شود.

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

ساختار یک کلاس معمولاً از دو بخش اصلی تشکیل می‌شود:

  1. Properties یا ویژگی‌ها
  2. 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 به من این امکان را داده است که پروژه‌ها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژه‌ای به کدنویسی تمیز، معماری مناسب، طراحی واکنش‌گرا، عملکرد مطلوب و تجربه کاربری روان دارم.

TEST_VALUE_123
https://t.me/artarasaneh
tel:09193426251
https://wa.me/+989193426251
https://instagram.com/artarasaneh_com