Maison > développement back-end > tutoriel php > '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
Libérer: 2024-02-25 21:22:02
avant
1216 Les gens l'ont consulté

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;
}
}
Copier après la connexion
  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;
}
}
Copier après la connexion
  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."
Copier après la connexion
  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() {
Copier après la connexion

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!

source:lsjlt.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal