戦略パターンはここが最適です。ウィキペディアの記事は参考にはなりますが、初心者向けの記事ではありません。
簡単に言えば (インターフェイス、型チェックなどを無視して)、潜在的な並べ替えアルゴリズムごとに個別のクラスを作成し、並べ替えクラスの 1 つのインスタンスをオブジェクトのコンストラクターに渡して使用できるようにします。次に、メイン クラスは、次のように、渡されたソーターに並べ替えアクションを委任します。
class mainthing {
public function __construct($sorter) {
$this->sorter = $sorter;
}
public function sort($stufftosort) {
return $this->sorter->sort($stufftosort);
}
}
class sorter {
public function sort($stufftosort) {
// sorting code here
}
}
class differentsorter {
public function sort($stufftosort) {
// different sorting code here
}
}
$thing = new mainthing(new sorter());
$thing->sort($somestuff);
$otherthing = new mainthing(new differentsorter());
$otherthing->sort($somestuff);
厳密な継承階層に縛られるのではなく、さまざまな動作を組み合わせて一致させることができるという考え方です。並べ替えだけでなく、これらのクラスについて異なる必要がある他のものがあるかもしれません-その機能を提供できるオブジェクトをコンストラクターに渡すことで同じことを行うだけです。