3.1 van functie naar object (oop) - NOT FINISHED!
In deze les gaan we leren wat een global variabele is en we gaan een functie maken waarbij we gebruik gaan maken van global variabelen. In sommige gevallen kan dat functioneel zijn. Zeker bij grotere programma's heeft het gebruik van global variabele nadelen en leidt snel tot fouten. Hoe we dit probleem oplossen is met object oriented programmeren en we gaan onze eerste stukje OOP maken.
Functies en globale variabelen
In het volgende filmpje wordt een functie gemaakt en wordt een voorbeeld gegeven van het gebruik van globale variabele in een functie.
In de video wordt de onderstaande besproken. We gaan deze code aanpassen.
<?php
global $som;
global $aantal;
$som=0;
$aantal=0;
function berekenGemiddelde($cijfer){
global $som, $aantal;
$som=$som+$cijfer;
$aantal++;
$gemiddelde=$som/$aantal;
return($gemiddelde);
}
echo "Gemiddelde: ".berekenGemiddelde(6)."<br>";
echo "Gemiddelde: ".berekenGemiddelde(7)."<br>";
echo "Gemiddelde: ".berekenGemiddelde(8)."<br>";
?>
Opgave 1
De functie berekenGemmidelde($cijfer), moet worden gesplits in twee nieuwe functies.
cijferToevoegen($cijfer), met deze functie voegen we cijfer toe.
gemiddeldeBerekenen(), met deze functie wordt het gemiddelde berekend
Met deze twee nieuwe functies moet het gemiddelde cijfer worden berekend van alle cijfers uit het volgende array.
$cijfersPHP=[5,5,6,5,7,6,7,5,8,7,8,6];
Gebruik een for-loop en voeg elke cijfer uit het array toe aan de lijst van gemiddelden met de functie cijferToevoegen($cijfer).
Als alle cijfers zijn toegevoegd, druk je het gemiddelde af met de functie gemiddeldeBerekenen().
Zet de nieuwe code in de file opdracht1.php en lever deze in.
OOP
Om de basis van OOP uit te leggen ga ik eerst aan de hand van een voorbeeld met een hond een paar nieuwe begrippen uitleggen. Als we die begrippen dan kennen ga ik in het tweede filmpje uitleggen hoe we het voorbeeld van het gemiddelde kunnen omzetten naar een object waarbij we de functies en de variabelen combineren in één object.
Begrippen
Class, Object, Properties en Methods worden nog een keer duidelijk gemaakt in:
https://slides.com/jamescandan/oop-php-for-beginners-1-2/fullscreen#/5
Dus een class is een sjabloon van een object en met het commando new <class_naam> maken we een nieuw object van de sjabloon. In een class heten de variabelen proeprties en de fucnties heten methods.
Code
Nu gaan we ons gemiddelde in een class zetten.
De code die we in het filmpje uitleggen:
<?php
class MijnGemiddelde {
private $som;
private $aantal;
public function __construct() {
$this->reset();
}
public function addNumber($number) {
$this->som=$this->som+$number;
$this->aantal++;
}
public function reset() {
$this->som=0;
$this->aantal=0;
}
public function gemiddelde() {
if ($this->aantal) {
return($this->som/$this->aantal);
} else {
return(0);
}
}
}
$gemiddeldePHP = new MijnGemiddelde;
$gemiddeldeJava = new MijnGemiddelde;
$gemiddeldePHP->addNumber(8);
$gemiddeldePHP->addNumber(6);
echo "Gemiddelde PHP: ".$gemiddeldePHP->gemiddelde();
echo "<hr>";
$gemiddeldeJava->addNumber(5);
$gemiddeldeJava->addNumber(7);
echo "Gemiddelde Java: ".$gemiddeldeJava->gemiddelde();
echo "<hr>";
$gemiddeldeJava->reset();
echo "Gemiddelde Java: ".$gemiddeldeJava->gemiddelde();
?>
In de volgende opdrachten wordt het voorbeeld van hierboven aangepast en uitgebreid.
Maak alle opdrachten en zet de aangepaste code in opdracht2.php.
Opdracht 2
Maak een nieuw object $gemiddeldeLinux.
Voeg de cijfers 8 en 7 toe aan het object $gemiddeldeLinux.
Druk het gemiddelde van Linux af op dezelfde manier zoals in het voorbeeld de andere gemiddelde zijn afgedrukt.
Zet de aangepaste code in opdracht2.php.
Opdracht 3
Pas de method gemiddelde aan, zodat het gemiddelde cijfer op één decimaal afgerond wordt gereturned.
zet de aangepaste code in opdracht2.php.
Opdracht 4
Voeg aan de class MijnGemiddelde een method toe waarmee je cijfers kunt toevoegen die 2x meetellen.
Dus stel je hebt een 5 en een 8 gehaald, maar de 8 telt twee maal mee. Dan is het gemiddelde 5+8+8=21 en 21/3=7
Properties (Variabelen) innu een object
method Ween kunnennoem die gewogenCijfer($cijfer, $gewicht). Je roept de method dan aan op driede verschillendevolgende manieren een variabele definiëren binnen een class: public, private of protected.manier.
Public
$gemiddeldePHP = new MijnGemiddelde;
$gemiddeldePHP = gewogenCijfer(5,1); // voeg het cijfer 5 toe, deze telt 1x mee
$gemiddeldePHP = gewogenCijfer(8,1); // voeg het cijfer 8 toe, deze telt 2x mee
echo "Gemiddelde PHP: ".$gemiddeldePHP->gemiddelde(); // het resultaat zou 7 moeten zijn
Een public variabele in een class kan buitenPas de class wordenMijnGemiddelde gebruikt.aan Bijvoorbeeld:
classmaak Test {
public $naam;
...
...
}
Nu kan je buiteneen de classnieuwe Testmethod gewogenCijfer($cijfer, $gewicht)
Zet de variabeleaangepaste naam gebruiken.
$mijnTest = new Test;
echo $mijnTest->naam;
Private
Een private variabele (zoalscode in hetopdracht2.php.
Lever gebruikt)de kanfile alleen door methodsopdracht2.php (functies)waarin de uitwerking van deopdracht class2, worden3 benaderd.en Je4 kuntzit) buiten de class om de variabelen niet gebruiken.
Protected
Wordt later uitgelegd.in.
--