Maison  >  Article  >  développement back-end  >  "Modèles de conception de programmation orientée objet PHP : compréhension des principes SOLID et de leurs applications"

"Modèles de conception de programmation orientée objet PHP : compréhension des principes SOLID et de leurs applications"

WBOY
WBOYavant
2024-02-25 21:20:111153parcourir

Les modèles de conception de programmation orientée objet PHP ont toujours été un sujet brûlant parmi les développeurs. Dans cet article, l'éditeur PHP Strawberry approfondira les principes SOLID pour aider les lecteurs à comprendre et à appliquer ces principes de conception. Le principe SOLID est la pierre angulaire de la programmation orientée objet, comprenant le principe de responsabilité unique, le principe d'ouverture et de fermeture, le principe de substitution de Liskov, le principe d'isolation d'interface et le principe d'inversion de dépendance. En apprenant et en mettant en pratique ces principes, les développeurs peuvent écrire du code PHP plus flexible, maintenable et évolutif.

  1. Principe de responsabilité unique (SRP) : une classe doit être responsable d'une seule tâche, et cette tâche doit être encapsulée dans la classe. Cela peut améliorer la maintenabilité et la réutilisabilité de la classe.
class User {
private $id;
private $name;
private $email;

public function __construct($id, $name, $email) {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}

public function getId() {
return $this->id;
}

public function getName() {
return $this->name;
}

public function getEmail() {
return $this->email;
}
}

class UserRepository {
private $connection;

public function __construct($connection) {
$this->connection = $connection;
}

public function save(User $user) {
$stmt = $this->connection->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$user->getName(), $user->getEmail()]);
}

public function find($id) {
$stmt = $this->connection->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$result = $stmt->fetch();

if ($result) {
return new User($result["id"], $result["name"], $result["email"]);
}

return null;
}
}
  1. Principe ouvert-fermé (OCP) : les entités logicielles (classes, modules, etc.) doivent être ouvertes aux extensions et fermées aux modifications. Cela peut améliorer la flexibilité du logiciel et réduire les coûts de maintenance du logiciel.
interface Shape {
public function getArea();
}

class Rectangle implements Shape {
private $width;
private $height;

public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}

public function getArea() {
return $this->width * $this->height;
}
}

class Circle implements Shape {
private $radius;

public function __construct($radius) {
$this->radius = $radius;
}

public function getArea() {
return pi() * $this->radius ** 2;
}
}

class ShapeCalculator {
public function calculateTotalArea($shapes) {
$totalArea = 0;
foreach ($shapes as $shape) {
$totalArea += $shape->getArea();
}

return $totalArea;
}
}
  1. Principe de substitution de Liskov (LSP) : une sous-classe peut remplacer sa classe parent sans affecter l'exactitude du programme. Cela augmente la flexibilité du logiciel et facilite la refactorisation.
class Animal {
public function eat() {
echo "Animal is eating.";
}
}

class Dog extends Animal {
public function bark() {
echo "Dog is barking.";
}
}

class Cat extends Animal {
public function meow() {
echo "Cat is meowing.";
}
}

function feedAnimal(Animal $animal) {
$animal->eat();
}

feedAnimal(new Dog()); // prints "Dog is eating."
feedAnimal(new Cat()); // prints "Cat is eating."
  1. Principe de ségrégation des interfaces (ISP) : plusieurs interfaces spécialisées doivent être utilisées au lieu d'une seule interface universelle. Cela peut améliorer la lisibilité du logiciel et réduire les coûts de maintenance du logiciel.
interface Printable {
public function print();
}

interface Scannable {
public function scan();
}

interface Faxable {
public function fax();
}

class Printer implements Printable {
public function print() {
echo "Printer is printing.";
}
}

class Scanner implements Scannable {
public function scan() {
echo "Scanner is scanning.";
}
}

class FaxMachine implements Faxable {
public function fax() {
echo "Fax machine is faxing.";
}
}

class MultifunctionDevice implements Printable, Scannable, Faxable {
public function print() {
echo "Multifunction device is printing.";
}

public function scan() {

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer