شیگرایی (Object-Oriented Programming یا OOP) یکی از پارادایمهای برنامهنویسی است که به توسعهدهندگان این امکان را میدهد تا کدهای خود را به صورت ساختاریافتهتر و قابل مدیریتتر بنویسند. این پارادایم بر مبنای مفهوم "اشیاء" (Objects) و "کلاسها" (Classes) بنا شده است. در زبان PHP، شیگرایی از نسخه ۵ به بعد به طور کامل پشتیبانی میشود و به یکی از مهمترین ویژگیهای این زبان تبدیل شده است. در این مقاله، به بررسی مفاهیم پایهای شیگرایی در PHP و همچنین مثالهای کاربردی آن خواهیم پرداخت.
برای درک بهتر شیگرایی، ابتدا باید با مفاهیم پایهای آن آشنا شویم. این مفاهیم شامل کلاسها، اشیاء، متدها، خواص، وراثت، چند ریختی و کپسولهسازی است.
کلاسها در واقع الگوهایی هستند که اشیاء بر اساس آنها ساخته میشوند. هر کلاس میتواند دارای خواص (Properties) و متدها (Methods) باشد. خواص، ویژگیها و متغیرهایی هستند که در کلاس تعریف میشوند و متدها، توابعی هستند که برای انجام عملیات روی این خواص به کار میروند.
php
Copy code
class Car {
public $color;
public $model;
public function setProperties($color, $model) {
$this->color = $color;
$this->model = $model;
}
public function display() {
return "This car is a " . $this->color . " " . $this->model;
}
}
اشیاء نمونههایی از کلاسها هستند. هنگامی که یک کلاس تعریف میشود، میتوان از آن کلاس شیء ایجاد کرد و از ویژگیها و متدهای آن استفاده کرد.
php
Copy code
$myCar = new Car();
$myCar->setProperties('Red', 'Toyota');
echo $myCar->display();
در این مثال، شیء $myCar از کلاس Car ساخته شده است و میتوانیم به خواص و متدهای آن دسترسی داشته باشیم.
وراثت یکی از ویژگیهای کلیدی شیگرایی است که به وسیله آن میتوان یک کلاس جدید را بر اساس یک کلاس موجود تعریف کرد. این ویژگی به کلاس جدید امکان میدهد که تمامی خواص و متدهای کلاس پایه (پدر) را به ارث برده و از آنها استفاده کند.
php
Copy code
class ElectricCar extends Car {
public $batteryCapacity;
public function setBatteryCapacity($capacity) {
$this->batteryCapacity = $capacity;
}
public function display() {
return parent::display() . " with a battery capacity of " . $this->batteryCapacity . " kWh.";
}
}
در این مثال، کلاس ElectricCar از کلاس Car به ارث برده شده و علاوه بر خواص و متدهای کلاس پایه، ویژگیها و متدهای جدیدی نیز به آن اضافه شده است.
چندریختی به این معناست که یک متد یا کلاس میتواند در اشکال مختلف عمل کند. این ویژگی به توسعهدهندگان این امکان را میدهد که با استفاده از یک نام واحد، متدهای مختلفی را با عملکردهای متفاوت در کلاسهای مختلف تعریف کنند.
php
Copy code
class GasCar extends Car {
public function display() {
return "This is a gas-powered " . $this->model;
}
}
$myElectricCar = new ElectricCar();
$myElectricCar->setProperties('Blue', 'Tesla');
$myElectricCar->setBatteryCapacity(85);
$myGasCar = new GasCar();
$myGasCar->setProperties('Black', 'Ford');
echo $myElectricCar->display(); // Output: This car is a Blue Tesla with a battery capacity of 85 kWh.
echo $myGasCar->display(); // Output: This is a gas-powered Ford
در این مثال، متد display در کلاسهای ElectricCar و GasCar به صورت متفاوتی پیادهسازی شده است.
کپسولهسازی به مفهوم مخفی کردن دادهها و جزئیات پیادهسازی و تنها نمایش اینترفیسهای عمومی کلاسها به کاربر اشاره دارد. این مفهوم به توسعهدهندگان کمک میکند تا کدها را امنتر و قابل مدیریتتر کنند.
php
Copy code
class BankAccount {
private $balance = 0;
public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(500);
echo $account->getBalance(); // Output: 500
در این مثال، ویژگی balance خصوصی (private) است و تنها از طریق متدهای تعریفشده میتوان به آن دسترسی داشت.
بیشتر بخوانید: php چیست و چه کاربردی دارد؟
برای درک بهتر مفاهیم شیگرایی در PHP، بهتر است به چند مثال کاربردی بپردازیم.
فرض کنید میخواهیم یک سیستم ساده برای مدیریت کارمندان یک شرکت طراحی کنیم. در این سیستم، ما میتوانیم یک کلاس پایه به نام Employee داشته باشیم و کلاسهای دیگر مانند Manager و Engineer از آن ارث ببرند.
php
Copy code
class Employee {
protected $name;
protected $position;
public function __construct($name, $position) {
$this->name = $name;
$this->position = $position;
}
public function displayInfo() {
return "Name: " . $this->name . ", Position: " . $this->position;
}
}
class Manager extends Employee {
public function assignTask($task) {
return $this->name . " has assigned task: " . $task;
}
}
class Engineer extends Employee {
public function completeTask($task) {
return $this->name . " has completed task: " . $task;
}
}
$manager = new Manager('John Doe', 'Manager');
echo $manager->displayInfo(); // Output: Name: John Doe, Position: Manager
echo $manager->assignTask('Project A'); // Output: John Doe has assigned task: Project A
$engineer = new Engineer('Jane Smith', 'Engineer');
echo $engineer->displayInfo(); // Output: Name: Jane Smith, Position: Engineer
echo $engineer->completeTask('Project A'); // Output: Jane Smith has completed task: Project A
در یک سیستم خرید و فروش آنلاین، ما میتوانیم از شیگرایی برای مدیریت محصولات، کاربران و سفارشها استفاده کنیم. به عنوان مثال، میتوانیم یک کلاس Product برای مدیریت اطلاعات محصولات، یک کلاس User برای مدیریت کاربران و یک کلاس Order برای مدیریت سفارشها داشته باشیم.
php
Copy code
class Product {
private $name;
private $price;
public function __construct($name, $price) {
$this->name = $name;
$this->price = $price;
}
public function displayProduct() {
return "Product: " . $this->name . ", Price: $" . $this->price;
}
}
class User {
private $username;
private $cart = [];
public function __construct($username) {
$this->username = $username;
}
public function addToCart(Product $product) {
$this->cart[] = $product;
}
public function displayCart() {
$output = "Cart for " . $this->username . ": ";
foreach ($this->cart as $product) {
$output .= $product->displayProduct() . "; ";
}
return $output;
}
}
class Order {
private $user;
private $products = [];
public function __construct(User $user, $products) {
$this->user = $user;
$this->products = $products;
}
public function placeOrder() {
return "Order placed by " . $this->user->displayCart();
}
}
$product1 = new Product('Laptop', 1000);
$product2 = new Product('Smartphone', 700);
$user = new User('Alice');
$user->addToCart($product1);
$user->addToCart($product2);
$order = new Order($user, [$product1, $product2]);
echo $order->placeOrder();
// Output: Order placed by Cart for Alice: Product: Laptop, Price: $1000; Product: Smartphone, Price: $700;
نتیجهگیری
شیگرایی در PHP یکی از قدرتمندترین ابزارها برای ساختاردهی به کد و ایجاد نرمافزارهای پیچیده و مقیاسپذیر است. با درک مفاهیم پایهای شیگرایی و تمرین آنها، میتوان کدهایی تمیزتر، قابل نگهداریتر و قابل توسعهتر نوشت. مثالهای کاربرد
موسسه پل استار رشت که مرکز شتابدهی استعداد کودکان و توانایی نوجوانان است، برگزار کننده دوره های آنلاینی مانند برنامه نویسی برای نوجوانان نیز هست و شما می توانید با شرکت در این دوره، فرصتی شگفت انگیز برای فرزندتان به ارمغان آورید و آینده شغلی او از همین حالا ضمانت کنید.