ホームページ >バックエンド開発 >PHPチュートリアル >PHP Liskov置換ケースの詳細説明

PHP Liskov置換ケースの詳細説明

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-17 10:38:081530ブラウズ

今回は、PHP Richter の置き換えケースについて詳しく説明します。以下は、PHP Richter の置き換えに関する 注意事項 について説明します。

リスコフ置換原則

リスコフ置換原則は、ソフトウェア内で基本クラスのオブジェクトをそのサブクラスのオブジェクトに置き換えた場合、プログラムはエラーや例外を生成しないことを示しています。ソフトウェア エンティティはサブクラス オブジェクトを使用しますが、必ずしも基本クラス オブジェクトを使用できるとは限りません。リスコフ置換原則は、開始および終了原則を実装するための重要な方法の 1 つです。サブクラス オブジェクトは、基本クラス オブジェクトが使用される場所であればどこでも使用できるため、プログラム内でオブジェクトを定義し、実行時にそれを決定するために基本クラスの型を使用するようにしてください。 . そのサブクラス タイプは、親クラス オブジェクトをサブクラス オブジェクトに置き換えます。

リスコフ置換原則を使用する場合、サブクラスのすべてのメソッドが親クラスで宣言されるか、サブクラスが親クラスで宣言されたすべてのメソッドを実装する必要があることに注意してください。親クラスを抽象クラスまたはインターフェイスとして設計し、サブクラスが親クラスを継承するか親インターフェイスを実装し、実行時に親クラスで宣言されたメソッドを実装するようにしてください。システムの機能を簡単に拡張でき、元のサブクラスのコードを変更する必要がなく、新しいサブクラスを追加することで新しい機能を追加できます。

コードの一部を通して理解してください

<?php
//例子1
class Bird{
  protect function fly(){
  }
}
//翠鸟
class KingFisher extends Bird{
}
//鸵鸟
class Ostrich extends Bird{
  //鸵鸟不会飞啊
}
//例子2
class A{
  protect function add($a, $b){
    return $a + $b;
  }
} 
//重载
class B extends A{
  protected function add($a, $b){
    return $a + $b + 100;
  }
}
?>

Liskov 置換原則は、クラス継承の制約です。 リスコフ置換原則には 2 つの理解があります:

1. 冗長なメソッドまたは属性を持つ不適切なクラスを単に継承することはできません。 (例1)

2. サブクラスは親クラスの機能を拡張することはできますが、親クラスの元々の機能を変更することはできません。 (例2)

リヒター置換原理には以下のような隠された意味が含まれています:

① サブクラスは親クラスの抽象メソッドを実装できますが、親クラスの非抽象メソッドをオーバーライドすることはできません。

② サブクラスは独自のメソッドを追加できます。

③ サブクラスのメソッドが親クラスのメソッドをオーバーライドする場合、メソッドの前提条件(メソッドの仮パラメータ)は、親クラスのメソッドの入力パラメータよりも緩くなります。

④ サブクラスのメソッドが親クラスの抽象メソッドを実装する場合、メソッドの事後条件(メソッドの戻り値)は親クラスの事後条件よりも厳しくなります。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨書籍:

PHP キャッシュ ツール XCache のインストールとユースケース分析

PHP が同時反復書き込みをどのように防ぐか

以上がPHP Liskov置換ケースの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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