Бұл жазба автоматты түрде аударылған. Бастапқы тіл: Орысша
SOLID-бұл әзірлеушілерге таза, қолдау көрсетілетін және икемді код жазуға көмектесетін объектіге бағытталған бағдарламалаудың (ОP) бес қағидасының жиынтығы. PHP мысалында әр принципті қарастырайық.
S-single Responsibility Principle (жалғыз жауапкершілік принципі): сыныпта бір жауапкершілік болуы керек. Мысалы, PHP-де мәліметтер базасымен жұмыс істеуге жауапты сынып деректерді тексерумен айналыспауы керек.
class UserRepository {
public function save(User $user) {
// Пайдаланушыны дерекқорға сақтау логикасы
}
}
O-open / Closed Principle (ашықтық/жабықтық принципі): сыныптар кеңейту үшін ашық, бірақ өзгерту үшін жабық болуы керек. PHP-де мұны абстрактілі сыныптар мен интерфейстер арқылы жүзеге асыруға болады.
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
// Журналдарды Файлға жазу логикасы
}
}
L-Liskov Substitution Principle (Лискаларды ауыстыру принципі): Ішкі сынып нысандары бағдарламаның әрекетін өзгертпестен ата-аналық сынып нысандарын ауыстыруы керек. Мысалы, егер құс сыныбында fly әдісі болса, онда Penguin Ішкі сыныбы оны бұзбауы керек.
class Bird {
public function fly() {
// Ұшу логикасы
}
}
class Penguin extends Bird {
// Пингвиндер ұшпайды, сондықтан fly әдісі Penguin-де болмауы керек
}
I-интерфейсті бөлу принципі (интерфейсті бөлу принципі): ортақ интерфейстерге қарағанда бірнеше арнайы интерфейстердің Болғаны жақсы. PHP-де бұл артық іске асырудан аулақ болуға көмектеседі.
interface Flyable {
public function fly();
}
interface Swimmable {
public function swim();
}
class Duck implements Flyable, Swimmable {
public function fly() {
// Ұшу логикасы
}
public function swim() {
// Жүзу логикасы
}
}
D-Dependency Inversion Principle (тәуелділікті инверсиялау принципі): жоғары деңгейлі Модульдер төмен деңгейлі модульдерге тәуелді болмауы керек. Екеуі де абстракцияларға байланысты болуы керек.
interface Mailer {
public function send($recipient, $message);
}
class SmtpMailer implements Mailer {
public function send($recipient, $message) {
// SMTP арқылы пошта жіберу логикасы
}
}
class UserNotification {
private $mailer;
public function __construct(Mailer $mailer) {
$this->mailer = $mailer;
}
public function notify($user) {
$this->mailer->send($user->email, "Hello!");
}
}
SOLID принциптері жүйенің өзгерістерге төзімділігін қамтамасыз ету және оның ауқымдылығын жақсарту арқылы PHP-де құрылымдалған және қолдау көрсетілетін кодты жасауға көмектеседі.
SOLID — это набор из пяти принципов объектно-ориентированного программирования (ООП), которые помогают разработчикам писать более чистый, поддерживаемый и гибкий код. Рассмотрим каждый принцип на примере PHP.
S - Single Responsibility Principle (Принцип единственной ответственности): Класс должен иметь одну ответственность. Например, в PHP класс, отвечающий за работу с базой данных, не должен заниматься валидацией данных.
class UserRepository {
public function save(User $user) {
// Логика сохранения пользователя в базу данных
}
}
O - Open/Closed Principle (Принцип открытости/закрытости): Классы должны быть открыты для расширения, но закрыты для изменения. В PHP это можно реализовать с помощью абстрактных классов и интерфейсов.
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
// Логика записи логов в файл
}
}
L - Liskov Substitution Principle (Принцип подстановки Лисков): Объекты подклассов должны заменять объекты родительского класса без изменения поведения программы. Например, если класс Bird имеет метод fly, то подкласс Penguin не должен его нарушать.
class Bird {
public function fly() {
// Логика полета
}
}
class Penguin extends Bird {
// Пингвины не летают, следовательно, метод fly не должен существовать в Penguin
}
I - Interface Segregation Principle (Принцип разделения интерфейса): Лучше иметь несколько специализированных интерфейсов, чем один общий. В PHP это помогает избежать избыточной реализации.
interface Flyable {
public function fly();
}
interface Swimmable {
public function swim();
}
class Duck implements Flyable, Swimmable {
public function fly() {
// Логика полета
}
public function swim() {
// Логика плавания
}
}
D - Dependency Inversion Principle (Принцип инверсии зависимостей): Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
interface Mailer {
public function send($recipient, $message);
}
class SmtpMailer implements Mailer {
public function send($recipient, $message) {
// Логика отправки почты через SMTP
}
}
class UserNotification {
private $mailer;
public function __construct(Mailer $mailer) {
$this->mailer = $mailer;
}
public function notify($user) {
$this->mailer->send($user->email, "Hello!");
}
}
Принципы SOLID помогают создавать более структурированный и поддерживаемый код в PHP, обеспечивая устойчивость системы к изменениям и улучшая её масштабируемость.