Inheritance

Inheritance (overerving) is het hele "x extends y"-verhaal. Je hebt parents en children. De vraag nu dus is hoe je dat nou goed hanteert. Dat leg ik hier uit.

Vaak is een object ook een ander object. Zo is het object PHPerik ook een object Mens. Mens is ook een Dier en Dier is ook een Organisme. In PHP zeg je dan eigenlijk: PHPerik extends Mens ... Mens extends Dier ... Dier extends Organisme.

Nu is de PHPerikregel: je mag alleen extenden "als X ook een Y is". Dus als je dat letterlijk kan zeggen, dan mag het, en anders niet.

Vb:

- MySQL extends Database -> mag, want MySQL is ook een Database
- MySQLQuery extends MySQL -> mag niet, want MySQLQuery is geen MySQL. Je mag wel een MySQLQuery-object maken, maar hij mag MySQL niet extenden. Als je dan gezeik krijgt met variabelen (zoals databaseconnection) die je moet hebben in MySQLQuery, dan zit er ergens een fout in je ontwerp. Connecties kun je gewoon doorgeven aan een class, want een connectie is op zichzelf alweer een object.
- Formulier extends DOMElement -> dit hangt er heel erg van af of je hier puur het HTML-element <form> bedoelt of dat je de technische representatie van een formulier bedoeld (zoals de data of functionaliteit).
- Konijn extends Dier -> mag
- Dier extends Organisme -> mag
- Konijn extends Organisme -> mag ook
- Dier extends Konijn -> mag niet

Dag extends Maand?
Een dag kan nooooit een maand extenden. Zie de PHPerikregel: "Is een dag ook een maand?" -> nee!. Dus je kan 'm absoluut niet extenden. Stel dat je een class Maand maakt dan bevat die class wel een array met allemaal Dag-objecten. Want een maand bevat wèl meerdere dagen. Maar een dag is geen maand.

Wat wel zou kunnen is: "Januari extends Maand". Januari is namelijk wèl een maand.

Voorbeeldje hoe je Dag-objecten in je Maand-object zouden kunnen zitten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

class Month
{
    const JANUARY = 1;
    // etc
    const AUGUST = 8;
    const $monthdays = array(1 => 31, 2 => 28, etc); // date() kan ook

    protected $days = array(); // array met Day-objecten, voor elke dag één

    public function __construct($month)
    {

           // kijk hoeveel dagen $month (in dit geval augustus)
           // heeft en maak (in dit geval 31) Day-objecten

           $this->makeDays( $this->monthdays[$month] );
    }


    protected function makeDays($amount)
    {

           for ($i = 1; $i <= $amount; $i++) {
                $day = new Day($i);
                $this->days[$i] = $day;
           }
    }
}


$month = new Month(Month::AUGUST); // of gewoon new Month(8)

?>

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Besef wat objecten zijn
  2. Objecten herkennen
  3. Foute denkwijze
  4. Inheritance
  5. Praktijk (geupdate)

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.