Demo 12: olio-ohjelmoinnin perusteita
Demossa toteutetaan luokat ja erotetaan ulkoasun tuottaminen omaksi tiedostokseen. Tätä lähestymistapaa kehitämme myöhemmin pidemmälle.
Luokka Opiskelija (opiskelija.php)
<?php
class Opiskelija
{
private $nimi;
private $email;
private $puh;
public function __construct($nimi, $email) {
$this->nimi = $nimi;
$this->email = $email;
}
public function haeNimi() {
return $this->nimi;
}
public function haeEmail() {
return $this->email;
}
}
?>
Luokka Opetusryhma (opetusryhma.php)
<?php
class Opetusryhma
{
private $ryhmannimi;
private $aloitusvuosi;
private $oma_opettaja;
private $opiskelijat = array();
public function __construct($ryhmannimi,$aloitusvuosi)
{
$this->ryhmannimi = $ryhmannimi;
$this->aloitusvuosi = $aloitusvuosi;
}
public function lisaa($opiskelija) {
$this->opiskelijat[] = $opiskelija;
}
public function haeRyhmannimi ()
{
// miksi ei viitata suoraan?
// mikä private ja public ero?
return $this->ryhmannimi;
}
public function nimilista() {
$nimet = array();
foreach($this->opiskelijat as $opiskelija) {
$nimet[] = $opiskelija->haeNimi();
}
return $nimet;
}
}
?>
Tiedosto index.php
Tämä tiedosto kutsuu muita tiedostoja (jatkossa sen sisältö jakaantuu kahteen eri tiedostoon (kontrolleriin ja reitittimieen).
<?php
require "opiskelija.php";
require "opetusryhma.php";
$opetusryhma = new Opetusryhma('TiViDO',2019);
$opetusryhma->lisaa(new Opiskelija("Jaakko", "jaakko@netti.fi"));
$opetusryhma->lisaa(new Opiskelija("Jorma", "jorma@gmail.com"));
$opetusryhma->lisaa(new Opiskelija("Jaana", "jaana67@gmail.com"));
$ryhma = $opetusryhma->haeRyhmannimi();
$opiskelijat = $opetusryhma->nimilista();
require 'opetusryhma.view.php';
?>
Tiedosto (opetusryhma.view.php)
Tämä tiedosto rakentaa kaiken html:n, muiden tehtävä on muokata tietoja taustalla.
Huomaa nopea tapa kirjoittaa <?php echo korvautuu <?= merkeillä.
<html>
<head>
<title>Oliodemo</title>
</head>
<body>
<h1>Ryhmä <?=$ryhma;?></h1>
<h3>Opiskelijaluettelo</h3>
<?php
foreach($opiskelijat as $opiskelija)
{
echo $opiskelija."<br>";
}
?>
</body>
</html>