Je suis en train d'écrire un ensemble de classes squelettes pour une application, en commençant par une classe de base appelée StoreLogic qui contient les règles fiscales, les règles d'escompte, etc. Les classes Panier, Commande, Devis, etc. étendront StoreLogic car elles utiliseront toutes les mêmes méthodes que StoreLogic.
Une fois ces classes de base terminées, je les implémenterai en étendant les classes Cart, Order, Quote et StoreLogic car chaque application de ces classes sera différente en fonction des besoins de nos différents clients. Remplacer les méthodes des classes mères est facile, mais remplacer les classes grand-parentes avant que leurs enfants ne les aient étendues semble... impossible ? J'ai l'impression que je ne m'y prends pas de la bonne façon(tm)... et je pense que quelqu'un de plus expérimenté comme vous pourrait m'indiquer la bonne direction. Jetez un coup d'œil au code et voyez ce que vous en pensez !
/* My core classes are something like this: */
abstract class StoreLogic
{
public function applyDiscount($total)
{
return $total - 10;
}
}
abstract class Cart extends StoreLogic
{
public function addItem($item_name)
{
echo 'added' . $item_name;
}
}
abstract class Order extends StoreLogic
{
// ....
}
/* Later on when I want to use those core classes I need to be able to override
* methods from the grandparent class so the grandchild can use the new overriden
* methods:
*/
class MyStoreLogic extends StoreLogic
{
public function applyDiscount($total) {
return $total - 5;
}
}
class MyOrder extends Order
{
// ...
}
class MyCart extends Cart
{
public $total = 20;
public function doDiscounts()
{
$this->total = $this->applyDiscount($this->total);
echo $this->total;
}
}
$cart = new MyCart();
$cart->doDiscounts(); // Uses StoreLogic, not MyStoreLogic..