Funktiot ja oliot
Luennolla käsitellään PHP:n funktioita ja olioita. Tutkitaan miten parametrien välitys toimii. Katsotaan, miten voidaan tehdä luokkia, luoda oliota ja käyttää niitä.
Luentotaltiointi
Ongelmia videon katselussa?Lomakkeet ja tietosuoja
Henkilötietolain mukaan pääsääntöisesti kaikesta henkilötietojen automaattisesta käsittelystä tulee tehdä ilmoitus tietosuojavaltuutetulle. Esimerkiksi jos tehdään WWW-lomakkeita, joissa kysytään henkilöä koskevia arkaluonteisia tietoja, ja tallennetaan ne johonkin, niin tällöin tehtävä rekisteri-ilmoitus. Jos palvelua käytetään tietoverkossa, rekisteriseloste tulee liittää verkkopalvelun yhteyteen.
Kertausta
Kerrataan muutamia edellisten luentojen asioita.
Parametrit ja PHP-taulukot
Parametrit taulukoksi (lähdekoodi)
PHP ja HTML4
Funktiot
<?php
function tulosta_kertotaulu($riveja, $sarakkeita) {
print "<table>\n<tr><th> </th>";
// ensimmäinen rivi
for ($j=1;$j<=$sarakkeita;$j++) {
print "<th>$j</th>";
}
print "</tr>\n";
for ($i=1;$i<=$riveja;$i++) {
// ensimmäinen sarake
print "<tr><th>$i</th>";
for ($j=1;$j<=$sarakkeita;$j++) {
// normaalit solut
print "<td>".($i*$j)."</td>";
}
print "</tr>\n";
}
print "</table>\n";
}
tulosta_kertotaulu(3,5);
tulosta_kertotaulu(9,9);
tulosta_kertotaulu(20,10);
?>
Funktion parametreista
Funktion parametrien nimet määrätään suluissa.
Funktiota voi kutsua ylimääräisillä parametreilla, mutta nämä jätetään huomiotta.
Funktio voi palauttaa jonkin arvon return -lausekkeella. Tällöin
funktion suoritus loppuu ja annettu arvo palautuu siihen kohtaan, jossa funktiota
kutsuttiin.
<?php
function tulosta_teksti($teksti) {
echo $teksti;
}
$test = array("Tekstiä"," ","testiin.");
tulosta_teksti(1,"Muuli",$test);
?>
Kaikki saadut parametrit voidaan käydä läpi func_-alkuisilla funktioilla:
<?php
function summaa_luvut() {
$param_lkm = func_num_args();
$param_arvot = func_get_args();
$summa = 0;
for ($i = 0; $i < $param_lkm; $i++) {
$parametri = $param_arvot[$i];
if (is_numeric($parametri))
$summa = $summa + $parametri;
}
return $summa;
}
print "<p>".summaa_luvut(1, 4, 5)."</p>";
print "<p>".summaa_luvut(2, 2, 2, 5)."</p>";
?>
Funktion parametrina voi olla myös taulukko:
<?php
function tulosta_tekstit($teksti, $taulukko, $teksti2) {
echo $teksti;
foreach ($taulukko as $muuttuja)
echo $muuttuja;
echo $teksti2;
}
$test = array("Tekstiä"," ","testiin.");
tulosta_tekstit("<p>",$test,"</p>");
?>
Muuttujien näkyvyys
Funktion sisällä esitellyt parametrit näkyvät vain funktion sisällä.
<?php
function tulosta_lkm() {
print "<p>Lukumäärä on $lkm</p>";
}
function tulosta_omalkm() {
$lkm = 3;
print "<p>Oma lukumäärä on $lkm</p>";
}
function tulosta_paramlkm($lukumaara) {
print "<p>Funktioon tuotu lukumäärä on $lukumaara</p>";
}
// ei tulosta lukumäärää, koska $lkm ei ole asetettu
print "<p>Funktion ulkopuolella lukumäärä on $lkm</p>";
// ei tulosta määrää, koska funktiossa ei määritelty $lkm
tulosta_lkm();
// tulostaa 3, koska funktion sisällä on määritelty $lkm-muuttuja
tulosta_omalkm();
// ei tulosta mitään, koska parametria ei olla välitetty funktioon
// antaa myös varoituksen koska parametria ei ole annettu!
tulosta_paramlkm();
// määrätään globaalilla näkyvyysalueella muuttuja $lkm
$lkm = 8;
// tulostaa 8
print "<p>Funktion ulkopuolella lukuja on $lkm</p>";
// ei tulosta mitään edelleenkään
tulosta_lkm();
// tulostaa 3, koska funktion sisällä on määritelty muuttuja $lkm
tulosta_omalkm();
// tulostaa 8, koska
tulosta_paramlkm($lkm);
?>
Referenssi
Normaali parametrin välitys väärin käytettynä:
<?php
function lisaa_kaksi($summattava) {
// $summattava saa arvon 6, mutta näkyvyys on vain funktion sisällä
$summattava = $summattava + 2;
// $summattava on 8, mutta mitään ei palauteta funktiosta
}
$luku = 6;
lisaa_kaksi($luku);
print $luku; // tulostaa 6
?>
Normaali parametrin välitys:
<?php
function lisaa_kaksi($summattava) {
// $summattava saa alkuksi arvon 6, ei muuta alkuperäistä arvoa $luku
$summattava = $summattava + 2;
// $summattava on 8 ja se palautetaan funktion arvona
return $summattava;
}
$luku = 6;
// funktion arvo sijoitetaan muuttujaan $luku
// muuttaa entisen arvon 6:sta 8:aan
$luku = lisaa_kaksi($luku);
print $luku; // tulostaa 8
?>
Parametri referenssinä:
<?php
function lisaa_kaksi(&$summattava) {
// $summattava viittaa nyt annettuun parametriin, tässä tapauksessa muuttujaan $luku
$summattava = $summattava + 2;
// $luku-muuttujan arvo kasvaa kahdella
}
$luku = 6;
lisaa_kaksi($luku);
print $luku; // tulostaa 8
?>
Referenssi välitettynä toiseen funktioon:
<?php
function lisaa_kaksi(&$summattava) {
// $summattava viittaa nyt muuttujaan $luku
$summattava = $summattava + 2; // $luku-muuttujan arvo kasvaa kahdella
}
function test(&$testi) {
// $testi viittaa nyt muuttujaan $luku
lisaa_kaksi($testi);
}
$luku = 6;
test($luku);
print $luku; // tulostaa 8
?>
Funktio-osoittimet
Jos muuttujassa on funktion nimi, niin sen nimistä funktiota voidaan kutsua suoraan antamalla muuttujan perään suluissa parametrit.
<?php
function tulosta_kissa() {
print "Kissa";
}
function tulosta_luku($luku) {
print $luku;
}
$funktio = "tulosta_kissa";
$funktio(); // tulostaa kissa
$funktio = "tulosta_luku";
$funktio(3); // tulostaa 3
?>
Oliot
Tehdään luokka, joka kapseloi tekstilaatikon, osaa validoida itsensä ja täyttää oletusarvot lomakeparametrien avulla.
- Attribuutit ja metodit
- set ja get-metodit
__toString()jaecho__construct- Oletusarvot $_REQUEST-muuttujasta
- Validointi funktiolla - asettaminen ja kutsuminen

