Jos haluat nähdä koodin värillisenä, klikkaa tästä.
EDIT: Hieman alkutietoa: Konstruktori luo olion, eli määrittää arvot sisäisiin muuttujiin. Private on vain kyseisen luokan sisäinen muuttuja, kun taas protected on myös aliluokille. Public nimensä mukaisesti näkyy ulos ja public funktioita voidaan käyttää $olio->metodi (funktio). Aliluokka perii kaikki yliluokan toiminnot.
- Koodi: Valitse kaikki
<?php
//tehdään luokka
class PiirraKuva {
//protected muuttujat näkyvät myös aliluokille, mutta eivät ole muutettavissa olion ulkopuolelta
protected $korkeus, $leveys, $numero;
//konstruktori, luodaan olio
public function PiirraKuva($korkeus, $leveys) {
//sijoitetaan määritellyt arvot olion sisäisiin muuttujiin
//$this->muuttuja on olion sisäinen muuttuja, joka ei siis sekotu olioiden kesken.
$this->korkeus = $korkeus;
$this->leveys = $leveys;
}
//metodit ovat kuten funktiot, eli tekevät jonkin tietyn toiminnon, tässä vain olion sisäisiä
//metodit ->
//palautetaan korkeus
public function kerroKorkeus() {
return $this->korkeus;
}
//palautetaan leveys
public function kerroLeveys() {
return $this->leveys;
}
//piirretään määritetyn kokoinen musta kuva
public function piirra() {
//kuvannimi vain muodon vuoksi
$kuvannimi = "musta.png";
//poistetaan jos sattuu olemaan jo edellinen samalla nimellä
@unlink($kuvannimi);
//tehdään oikean kokoinen kuva
$kuva = imagecreate($this->leveys, $this->korkeus);
//musta, tässä ei väriä määritetty
imagecolorallocate($kuva, 0, 0, 0);
//tallennetaan kuva tiedostoon
imagepng($kuva, $kuvannimi);
imagedestroy($kuva);
//palautetaan kuvannimi, jotta saadaan näytettyä oikea kuva
return $kuvannimi;
}
// <- metodit
}
//luodaan aliluokka (extends) joka perii PiirraKuva:n ominaisuudet
class PiirraVariKuva extends PiirraKuva {
//tällä luokalla ei ole aliluokkaa, joten voidaan pitää private-muuttujia
private $puna, $viher, $sini;
//oma konstruktori, tämä saa väriarvot myös
public function PiirraVariKuva ($korkeus, $leveys, $puna, $viher, $sini) {
//käytetään yliluokan konstruktoria määrittämään korkeus ja leveys; ei tarvitse kirjoittaa kahdesti
parent::__construct($korkeus, $leveys);
//värit omiin muuttujiin
$this->puna = $puna;
$this->viher = $viher;
$this->sini = $sini;
}
//piirretään värillinen kuva
public function piirra() {
$kuvannimi = "vari.png";
@unlink($kuvannimi);
$kuva = imagecreate($this->leveys, $this->korkeus);
//tietyn värinen kuva
imagecolorallocate($kuva, $this->puna, $this->viher, $this->sini);
imagepng($kuva, $kuvannimi);
imagedestroy($kuva);
return $kuvannimi;
}
}
//luodaan oliot
$kuva1 = new PiirraKuva(160, 140);
$kuva2 = new PiirraVariKuva(140, 120, 255, 0, 0);
//tehdään taulukko hahmottamiseksi
echo '<html>';
echo '<table border="1">';
echo '<tr><td>Kuva1</td><td>Kuva2</td></tr><tr><td>';
//metodeja kutsutaan $olionnimi->metodi
//kutsutaan ja tulostetaan ensimmäisen kuvan korkeus ja leveys
echo $kuva1->kerroKorkeus() . ' x ' . $kuva1->kerroLeveys();
echo '</td><td>';
//kutsutaan ja tulostetaan toisen kuvan korkeus ja leveys (käyttää yliluokan metodeita)
echo $kuva2->kerroKorkeus() . ' x ' . $kuva2->kerroLeveys();
echo '</td></tr><tr><td>';
//piirretään kuva1
echo '<img src="'.$kuva1->piirra().'" alt="" />';
echo '</td><td>';
//piirretään kuva2
echo '<img src="'.$kuva2->piirra().'" alt="" />';
echo '</td></tr>';
echo '</table>';
echo '</html>';
?>
EDIT: Tässä on ehkä hieman selkeyttävä kuva:
[img:local=836a48d79c96d5ba6f119a487a215544.png]http://kaatis.myftp.org/uppi/tiedostot/03c9coliot.jpg[/img]
