Single Responsibility Principle(SRP)
Bu ilke, her sınıfın tek bir sorumluluğu olması gerektiğini belirtir. Bir sınıfın belirli bir işlevi yerine getirmesi gerektiğini ve değişmek için çok fazla nedeni olmaması gerektiğini vurgular.
Örnek: Kullanıcı bilgilerini yönetme ve e-posta bildirimleri gönderme.
class UserManager {
public function createUser($userData) {
// Logic for creating a user
}
}
class EmailService {
public function sendEmail($emailData) {
// Logic for sending an email
}
}
Open/Closed Principle(OCP)
Bu ilke, mevcut kodu değiştirmek yerine yeni kod ekleyerek işlevselliği genişletmeyi teşvik eder.
Örnek: Bir e-ticaret uygulamasında farklı ödeme yöntemlerinin kullanılması.
interface PaymentProcessor {
public function processPayment();
}
class CreditCardPaymentProcessor implements PaymentProcessor {
public function processPayment() {
// Logic for processing credit card payment
}
}
class PayPalPaymentProcessor implements PaymentProcessor {
public function processPayment() {
// Logic for processing PayPal payment
}
}
Liskov Substitution Principle(LSP)
Bu ilke, türetilmiş bir sınıfın nesnelerinin, programın doğruluğunu etkilemeden temel sınıfın nesnelerinin yerine geçebileceğini iddia eder.
Örnek: Geometrik şekilleri yönetme.
abstract class Shape {
abstract public function area();
}
class Rectangle extends Shape {
public function area() {
return $this->width * $this->height;
}
}
class Square extends Shape {
public function area() {
return $this->side * $this->side;
}
}
Interface Segregation Principle(ISP)
Bu ilke, sınıfları ihtiyaç duymadıkları yöntemleri uygulamaya zorlamaktan kaçınmak için arabirimleri daha küçük olanlara ayırmayı önerir.
Örnek: Verileri güncellemek ve görüntülemek için arayüzler.
interface UpdateableFeature {
public function updateFeature();
}
interface DisplayableFeature {
public function displayFeature();
}
Dependency Inversion Principle(DIP)
Bu ilke, bağımlılıkları yönetmek için bağımlılık enjeksiyonunun kullanılmasını önerir.
Örnek: Bağımlılıkları yönetmek için bağımlılık enjeksiyonunu kullanma.
class OrderProcessor {
private $dbConnection;
private $emailService;
public function __construct(DatabaseConnection $dbConnection, EmailService $emailService) {
$this->dbConnection = $dbConnection;
$this->emailService = $emailService;
}
}
PHP'de ilkeleri uygulamanın, SOLID projenizin özel amacına ve SOLID PHP'yi anlamanıza bağlı olarak esnek bir şekilde yapılması gerektiğini unutmayın.