>백엔드 개발 >PHP 튜토리얼 >PHP 프로그래밍에 대한 올바른 접근 방식: 실용적인 팁과 예제

PHP 프로그래밍에 대한 올바른 접근 방식: 실용적인 팁과 예제

DDD
DDD원래의
2023-10-07 10:40:581055검색

신뢰할 수 있고 유지 관리가 가능한 코드는 성공적인 PHP 프로젝트의 중추입니다. 이를 달성하기 위해 SOLID 원칙에 따라 코드를 작성할 수 있습니다. 이러한 원칙에는 단일 책임 원칙(SRP), 개방형 폐쇄 원칙(OCP), 리스코프 대체 원칙(LSP), 인터페이스 분리 원칙(ISP) 및 종속성 역전 원칙(DIP)이 포함됩니다.

단일 책임 원칙(SRP)

단일 책임 원칙에서는 클래스를 변경할 이유가 하나만 있어야 한다고 명시합니다. PHP에서 이는 클래스가 단일 책임을 져야 함을 의미합니다. 이러한 디자인은 코드의 유지 관리성과 가독성을 향상시킬 수 있습니다.

나쁜 예 - 혼합 책임

class  User
 { 
    public  function  verify ( $username , $password ) { /* ... */ } 
    public  function  sendEmail ( $message ) { /* ... */ } 
}

좋은 예 - 단일 책임

class  UserAuthenticator
 { 
    public  function  verify ( $username , $password ) { /* ... */ } 
} 
class EmailSender
 {
     public  function  sendEmail ( $message ) { /* ... */ }
}

개방형 원칙(OCP)

개방형 원칙은 클래스가 확장에 개방되어야 한다고 명시하지만 확장이 열리지 않음 수정이 닫혔습니다. PHP에서는 인터페이스와 추상 클래스를 사용하여 이 원칙을 구현할 수 있습니다. 인터페이스와 추상 클래스를 정의함으로써 기존 코드를 수정하지 않고도 기능을 확장할 수 있습니다.

나쁜 예 - 직접 수정

class Square
{
    public $side;
    public function __construct($side)
    {
        $this->side = $side;
    }
}
class AreaCalculator
{
    public function calculate($shapes)
    {
        $area = 0;
        foreach ($shapes as $shape) {
            if ($shape instanceof Square) {
                $area += $shape->side * $shape->side;
            } elseif ($shape instanceof Circle) {
                $area += pi() * $shape->radius * $shape->radius;
            }
        }
        return $area;
    }
}

좋은 예 - 확장 가능

interface Shape
{
    public function area();
}
class Square implements Shape
{
    private $side;
    public function __construct($side)
    {
        $this->side = $side;
    }
    public function area()
    {
        return $this->side * $this->side;
    }
}
class Circle implements Shape
{
    private $radius;
    public function __construct($radius)
    {
        $this->radius = $radius;
    }
    public function area()
    {
        return pi() * $this->radius * $this->radius;
    }
}

Lishkov 대체 원리(LSP)

리스코프 대체 원리는 슈퍼클래스의 객체가 서브클래스를 사용할 수 있어야 한다고 규정합니다. 프로그램의 정확성에 영향을 미치지 않고. PHP에서 이 원칙을 준수하면 파생 클래스가 기본 클래스의 계약을 유지하는 것이 보장됩니다. 이는 코드 일관성과 신뢰성을 보장합니다.

나쁜 예 - LSP 위반

class Bird
{
    public function fly() { /* ... */ }
}
class Ostrich extends Bird
{
    public function fly() { throw new Exception("鸵鸟不能飞"); }
}

좋은 예 - LSP 따르기

interface Bird
{
    public function fly();
}
class Sparrow implements Bird
{
    public function fly() { /* ... */ }
}
class Ostrich implements Bird
{
    public function fly() { /* ... */ }
}

인터페이스 격리 원칙(ISP)

인터페이스 격리 원칙은 클라이언트가 자신이 아닌 것에 의존하도록 강요해서는 안 된다고 명시합니다. 인터페이스를 사용합니다. PHP에서 이는 크고 모놀리식 인터페이스보다는 더 작고 집중적인 인터페이스를 만드는 것을 의미합니다. 이 디자인은 코드 유연성과 유지 관리성을 향상시킵니다.

나쁜 예 - 인터페이스 Abscess

interface Worker
{
    public function work();
    public function eat();
    public function sleep();
}

좋은 예 - 인터페이스 격리

interface Workable
{
    public function work();
}
interface Eatable
{
    public function eat();
}
interface Sleepable
{
    public function sleep();
}

DIP(종속성 역전 원칙)

종속성 역전 원칙은 상위 수준 모듈이 하위 수준 모듈에 종속되어서는 안 된다는 것을 명시합니다. , 그러나 둘 다 추상화에 의존해야 합니다. PHP에서는 종속성 주입과 추상화를 사용하여 클래스를 분리할 수 있습니다. 이렇게 하면 코드의 테스트 가능성과 유지 관리 가능성이 향상됩니다.

나쁜 예 - 상위 수준 모듈은 하위 수준 모듈에 의존합니다.

class LightBulb
{
    public function turnOn() { /* ... */ }
    public function turnOff() { /* ... */ }
}
class Switch
{
    private $bulb;
    public function __construct()
    {
        $this->bulb = new LightBulb();
    }
    public function operate()
    {
        // Operate the bulb
    }
}

좋은 예 - 추상화 및 종속성 주입

interface Switchable
{
    public function turnOn();
    public function turnOff();
}
class LightBulb implements Switchable
{
    public function turnOn() { /* ... */ }
    public function turnOff() { /* ... */ }
}
class Switch
{
    private $device;
    public function __construct(Switchable $device)
    {
        $this->device = $device;
    }
    public function operate()
    {
        // Operate the device
    }
}

결론적으로, SOLID 원칙을 준수하는 PHP 코드를 작성하는 것은 유지 관리 및 확장이 가능한 PHP 코드를 작성하는 데 필수적입니다. 애플리케이션이 중요합니다. 이러한 원칙을 준수하고 제공된 예제를 구현하면 시간이 지남에 따라 PHP 코드가 더욱 강력하고 유연하며 유지 관리하기 쉬워집니다. 이러한 원칙을 적용하려면 사고와 디자인의 변화가 필요할 수 있지만 코드 품질과 유지 관리 가능성의 이점은 노력할 가치가 있다는 점을 명심하세요. 훌륭한 PHP 코드 작성에 행운을 빕니다!

위 내용은 PHP 프로그래밍에 대한 올바른 접근 방식: 실용적인 팁과 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.