ホームページ >バックエンド開発 >PHPチュートリアル >PHP プログラミングへの正しいアプローチ: 実践的なヒントと例

PHP プログラミングへの正しいアプローチ: 実践的なヒントと例

DDD
DDDオリジナル
2023-10-07 10:40:581054ブラウズ

信頼性が高く保守しやすいコードは、成功する PHP プロジェクトのバックボーンです。これを実現するには、SOLID 原則に従ってコードを記述します。これらの原則には、単一責任原則 (SRP)、オープンクローズ原則 (OCP)、リスコフ置換原則 (LSP)、インターフェース分離原則 (ISP)、および依存性反転原則 (DIP) が含まれます。

単一責任原則 (SRP)

単一責任原則では、クラスが変更する理由は 1 つだけであるべきであると規定されています。 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 ) { /* ... */ }
}

Open-クローズド原則 (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;
    }
}

リヒター置換原則 ( 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 では、これは、大規模なモノリシック インターフェイスではなく、より小規模でより焦点を絞ったインターフェイスを作成することを意味します。この設計により、コードの柔軟性と保守性が向上します。

悪い例 - インターフェイスのアブセス

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。