برنامهنویسی شیءگرا یکی از مهمترین مفاهیم در توسعه نرمافزار است که به برنامهنویسان امکان میدهد کدها را به شیءها یا کلاسها تقسیم کرده و از ویژگیها مانند انتزاع، polymorphism و … استفاده کنند. PHP یک زبان برنامهنویسی قدرتمند است که از برنامهنویسی شیءگرا پشتیبانی میکند و امکان ایجاد کلاسها و شیءهای متعدد را فراهم میکند. در این مقاله، با مفاهیم برنامهنویسی شی گرایی در PHP آشنا میشویم. ابتدا به تعاریف و مفاهیم پایه برنامهنویسی شیءگرا میپردازیم و سپس به نحوه ایجاد کلاسها، شیءها و ویژگیهای آنها در PHP میپردازیم. همچنین پیشنهاد میکنیم آموزش مدیریت استثنا در php را نیز مطالعه نمایید.
مفاهیم پایه برنامهنویسی شی گرایی در PHP
1. شیء (Object)
یک شیء نمونهای از یک کلاس است. یک شیء میتواند دارای ویژگیها (attribute) و متدهای (method) خاص به خود باشد. به عنوان مثال، یک شیء از کلاس “car” ممکن است دارای ویژگیهایی مانند رنگ، سرعت و مدل باشد و متدهایی مانند “drive” و “stop” داشته باشد.
2. کلاس (Class)
یک کلاس یک قالب برای ایجاد اشیا است. کلاسها ویژگیها و متدهای مشترکی را برای اشیایی که از آن کلاس ایجاد میشوند، تعریف میکنند. به عبارت دیگر، کلاس یک نقشه برای ایجاد شیءهاست.
3. ویژگی (Property)
ویژگیهای دادهای یا ویژگیها به هر شیء از یک کلاس اختصاص مییابد. به عنوان مثال، یک ویژگی “color” میتواند به هر شیء از کلاس “car” اختصاص یابد و مقدار آن به رنگ واقعی ماشین اشاره کند.
4. متد(Method)
متدها عملیات یا عملکردهایی هستند که میتوانند توسط شیءها از یک کلاس فراخوانی شوند. متدها معمولاً برای انجام عملیات خاص بر روی شیء فراخوانی میشوند. به عنوان مثال، یک متد “drive” میتواند ماشین را به حرکت درآورد.
5. انتزاع (Abstraction)
انتزاع به معنای مخفی کردن جزئیات پیچیده و ارائه یک رابط ساده به کاربران است. به عبارت دیگر، انتزاع به برنامهنویس امکان میدهد تا جزئیات پیچیده کارکرد یک شیء را مخفی کند و تنها امکانات اساسی و مورد نیاز را ارائه دهد. این اصل مهم در برنامهنویسی شیءگرا به بهبود قابلیتهای نگهداری کد کمک میکند.
ایجاد کلاس در PHP
در PHP، شما میتوانید با استفاده از کلمه کلیدی class
یک کلاس تعریف کنید. یک کلاس معمولاً شامل ویژگیها و متدهایی است که برای شیءهای آن کلاس ایجاد میشوند. به عنوان مثال، در زیر یک کلاس ساده به نام “Person” تعریف گردیده است:
class Person {
// ویژگیها
public $name;
public $age;
// متدها
public function sayHello() {
echo "سلام! من $this->name هستم و $this->age سال دارم.";
}
}
در این مثال، کلاس “Person” دارای دو ویژگی به نام “name” و “age” و یک متد به نام “sayHello” است. ویژگیها با استفاده از کلمه کلیدی public
تعریف شدهاند، که به این معناست که به طور مستقیم میتوان به آنها دسترسی داشت. متد “sayHello” نیز با استفاده از کلمه کلیدی public
تعریف شده و میتواند توسط شیءهای از کلاس “Person” فراخوانی شود.
ایجاد شیء از یک کلاس
پس از تعریف یک کلاس، میتوانید شیءهای مختلفی از آن کلاس ایجاد کنید. برای ایجاد یک شیء از یک کلاس در PHP، از کلمه کلیدی new
استفاده میشود. به عنوان مثال:
$person1 = new Person();
$person2 = new Person();
در این مثال، دو شیء به نام “person1” و “person2” از کلاس “Person” ایجاد شدهاند.
دسترسی به ویژگیها و متدها
برای دسترسی به ویژگیها و متدهای یک شیء، از عملگر ->
استفاده میشود. به عنوان مثال:
$person1->name = "آرمان";
$person1->age = 30;
$person2->name = "سارا";
$person2->age = 25;
$person1->sayHello(); // نمایش پیام توسط روش sayHello
در این مثال، ما به ویژگیهای “name” و “age” شیء “person1” دسترسی داشته و مقدارهای مورد نظر را تنظیم کردهایم. همچنین، با فراخوانی روش “sayHello()”، پیام مرتبط با شیء “person1” چاپ میشود.
مدیریت دسترسی به ویژگیها
در PHP، میتوانید مدیریت دقیقتری برای دسترسی به ویژگیها تعریف کنید. به جای استفاده از عملگر ->
برای دسترسی به ویژگیها، میتوانید مدیریتکنندههای دسترسی (access modifiers) مانند public
، private
و protected
را استفاده کنید.
public
: اگر یک ویژگی به عنوان public
تعریف شود، به طور عمومی به آن دسترسی دارید و میتوانید به آن از خارج از کلاس دسترسی داشته باشید.
private
: اگر یک ویژگی به عنوان private
تعریف شود، فقط در داخل کلاس به آن دسترسی دارید و نمیتوانید به آن از خارج از کلاس دسترسی داشته باشید.
protected
: اگر یک ویژگی به عنوان protected
تعریف شود، در داخل کلاس به آن دسترسی دارید و همچنین میتوانید به آن از کلاسهای مشتق شده (یا ارث بری شده) دسترسی داشته باشید.
مثال کامل: کلاس “Person” با مدیریت دسترسی
class Person {
// ویژگیها با مدیریت دسترسی
public $name;
private $age;
// متد تنظیم سن با مدیریت دسترسی
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
}
}
// متد دریافت سن با مدیریت دسترسی
public function getAge() {
return $this->age;
}
// روش عمومی برای نمایش اطلاعات
public function displayInfo() {
echo "نام: $this->name<br>";
echo "سن: " . $this->getAge() . "<br>";
}
}
$person = new Person();
$person->name = "آرمان";
$person->setAge(30);
$person->displayInfo(); // نمایش اطلاعات با استفاده از روش displayInfo
در این مثال، ویژگی “name” به عنوان public
تعریف شده است و به طور عمومی قابل دسترسی است. ویژگی “age” به صورت خصوصی (private) تعریف شده و فقط در داخل کلاس “Person” قابل دسترسی است. برای تنظیم و دریافت مقدار سن از متد “setAge” و “getAge” استفاده شده و این متدها به ترتیب ویژگی “age” را تنظیم و دریافت میکنند.
در متد”displayInfo”، اطلاعات نام و سن شیء “Person” چاپ میشود. در اینجا میتوانید مشاهده کنید که چگونه مدیریت دسترسی به ویژگیها با استفاده از مدیریتکنندههای دسترسی public
و private
انجام میشود.
وراثت (Inheritance)
وراثت یکی از اصول مهم برنامهنویسی شی گرایی در PHP است که به شما امکان میدهد یک کلاس جدید را بر اساس یک کلاس موجود تعریف کنید. کلاس جدید (کلاس مشتق) از کلاس موجود (کلاس پایه) تمام ویژگیها و متدهای کلاس پایه را به ارث میبرد و میتواند ویژگیها و متدهای بیشتر را اضافه کند یا آنها را تغییر دهد.
در PHP، از کلمه کلیدی extends
برای ایجاد وراثت استفاده میشود. به عنوان مثال:
class Student extends Person {
// اضافه کردن ویژگیها و روشهای جدید برای کلاس Student
public $studentID;
public function setStudentID($id) {
$this->studentID = $id;
}
}
در این مثال، کلاس “Student” از کلاس “Person” ارث بری کرده است. این به این معناست که کلاس “Student” تمام ویژگیها و متدهای کلاس “Person” را دارد و میتواند ویژگیها و متدهای بیشتر را به آن اضافه کند. به عنوان مثال، ویژگی “studentID” و متد”setStudentID” به کلاس “Student” اضافه شدهاند.
پلیمورفیسم (Polymorphism)
پلیمورفیسم به معنای قابلیت شیءها برای ارائه رفتار مختلف در واکنش به درخواستهای مشابه است. این اصل به شما امکان میدهد تا یک متد را در چندین کلاس متفاوت با تعریفهای مختلف به کار ببرید.
یکی از روشهای اصلی پلیمورفیسم در PHP استفاده از واژهی کلیدی interface
است. یک رابط (interface) به عنوان یک قرارداد برای متدها تعریف میشود و کلاسها میتوانند از آن رابط ارث بری کنند و متدهای مشخص گردیده در رابط را پیادهسازی کنند.
// تعریف یک رابط به نام "Shape"
interface Shape {
public function calculateArea();
}
// تعریف کلاس "Circle" که از رابط "Shape" ارث بری میکند
class Circle implements Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function calculateArea() {
return 3.14 * $this->radius * $this->radius;
}
}
// تعریف کلاس "Rectangle" که از رابط "Shape" ارث بری میکند
class Rectangle implements Shape {
private $width;
private $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
public function calculateArea() {
return $this->width * $this->height;
}
}
// استفاده از پلیمورفیسم برای محاسبه مساحت اشکال مختلف
$circle = new Circle(5);
$rectangle = new Rectangle(4, 6);
$shapes = [$circle, $rectangle];
foreach ($shapes as $shape) {
echo "مساحت: " . $shape->calculateArea() . "<br>";
}
در این مثال، ما یک رابط به نام “Shape” تعریف کردهایم که یک متد به نام “calculateArea” دارد. سپس دو کلاس “Circle” و “Rectangle” را تعریف کردهایم که از رابط “Shape” ارث بری میکنند و متد “calculateArea” را پیادهسازی میکنند. در نهایت، با استفاده از پلیمورفیسم، میتوانیم مساحت اشکال مختلف را با استفاده از یک حلقه نمایش دهیم.
خلاصه شی گرایی در PHP
برنامهنویسی شی گرایی در PHP یکی از اصول مهم توسعه نرمافزار است و امکانات قدرتمندی برای تعریف کلاسها، ایجاد شیءها، وراثت و پلیمورفیسم را فراهم میکند. این اصول به شما امکان میدهند کدهایتان را سازماندهی کنید، قابلیت نگهداری را بهبود بخشید و کدهای قابل استفاده مجدد را ترویج دهید. از اینجا، شما میتوانید به تعمق بیشتری به موضوعات مانند ایجاد کلاسهای انتزاعی و پلیمورفیسم پی ببرید تا تواناییهای بیشتری در برنامهنویسی شیءگرا در PHP به دست آورید.