| Sisällysluettelo |
|
PHP-sivu koostuu kuvauskielestä(yleensä HTML) sekä PHP-skripteistä. Suositeltavin tapa käyttää PHP:ta on <?php ja ?> käyttö skriptin ympärillä.
<?php echo "Hello World" ?>
Toinen mahdollinen tapa on käyttää SGML-syntaksia ja merkkejä <? ja ?>
Helpoin ja lyhyin tapa on käyttää script-elementtiä.
<script language="php">
echo "Hello World";
</script>
Usein käytetään HTML-kielen kanssa lyhyitä lausekkeen arvoja, jotka vain tulostavan informaatiota.
<p>PHP:n versio on <?= phpversion() ?></p>
PHP-skripti kuten muutkin ohjelmointikielet koostuvat lauseista jotka erotellaan toisistaan puolipisteen avulla.
<?php
echo "Ensimmäinen rivi<br>";
echo "Toinen rivi<br>";
echo "Kolmas rivi<br>";
?>
Käsky echo tulostaa näytölle annetun merkkijonon tai muuttujan sisällön
Merkkijonossa voi olla kuvauskielen mukaisia käskyjä. Tässä tapauksessa <br>,
joka on HTML-kielessä rivinvaihto.
PHP-skriptissä osat, jotka kuuluvat kuvauskieleen voidaan tulostaa PHP-skriptin ulkopuolella.
<?php
if ($ehto) {
echo "<p>Merkkausta skriptin sisällä!</p>";
}
?>
Voidaan kirjoitaa muodossa
<?php if ($ehto) { ?>
<p>Merkkausta skriptin ulkopuolella!</p>
<?php } ?>
PHP-koodin joukkoon voi lisätä kommentteja kolmella eri tavalla.
<?php
echo "Ensimmäinen rivi<br>"; // Kommentti
echo "Toinen rivi<br>";
/*
Pitempi kommentti ilmaisemaan
suurempia asiakokonaisuuksia
*/
echo "Kolmas rivi<br>"; # Kommentti
?>
PHP:ssä muuttujia ei tarvitse luoda eikä määritellä. Aina kun muuttujalle annetaan sen ensimmäinen arvo se syntyy itsestään. PHP:n muuttujan eteen kirjoitetaan aina dollarinmerkki $.
<?php
$nimi = "Jaakko";
$ika = "80";
echo "$nimi, $ika vuotta.";
?>
skripti tulostaa sivulle:
Jaakko, 80 vuotta.
Kun muuttuja on luotu sivulla, sitä voi käyttää missä tahansa kohdassa sivua.
<?php $nimi = "Jaakko"; ?> ... Tekstiä, kuvia HTML:ää ... <?php echo "$nimi"; ?>
PHP-kielessä on useita komentorakenteita, joilla voidaan ohjata ohjelman suoritusta. Nämä komentorakenteet on lainattu C-kielestä ja ovat yleisiä muissakin ohjelmointikielissä.
if(ehtolause) {
komennot
}
elseif(ehtolause) {
komennot
}
else {
komennot
}
Ehtolauseella tarkoitetaan lausetta, jossa verrataan esimerkiksi kahta
lukua toisiinsa. Kuten alla olevassa esimerkissä, voidaan verrata esim.
muuttujaa luku arvoon 5. Jos luku on suurempi,
kuin 5, niin ehtolause palauttaa totuusarvon
tosi, muuten epätosi. Jos arvo on tosi, suoritetaan seuraavina aaltosuluissa
olevat komennot. Esimerkin tapauksessa tulostetaan komennolla print
näytölle lause: "Luku on suurempi kuin 5." Jos ehtolauseen arvo on
epätosi, siirrytään elseif-lauseeseen. Jos tämän ehtolauseen arvo on tosi,
eli esimerkin tapauksessa luku on pienenpi kuin 5, suoritetaan sen alla
oleva komento ja näytölle tulostuu: "Luku on pienempi kuin 5." Jos
tämäkään ehto ei saa arvoa tosi, kuten esimerkissä siinä tapauksessa, että
luku on yhtäkuin viisi, suoritetaan viimeinen, else-lauseen alla oleva
komento.
$luku = 4;
if($luku > 5) {
print "Luku on suurempi kuin 5.";
}
elseif($luku < 5) {
print "Luku on pienempi kuin 5.";
}
else {
print "Luku on 5.";
}
switch($muuttuja) {
case ensimmainen_arvo :
komennot
break;
case toinen_arvo :
komennot
break;
default :
komennot
break;
}
Ensimmäiset komennot suoritetaan, jos muuttujan $muuttuja arvo vastaa
arvoa "ensimmainen_arvo". Vastaavasti, jos arvo vastaa arvoa "toinen_arvo",
suoritetaan sen alla olevat komennot. Jos on vielä lisää mahdollisia arvoja,
mutta mikään niistä ei vastaa muuttujan $muuttuja arvoa, suoritetaan
"default":n alla olevat komennot. Break katkaisee komentojan suorittamisen
jälkeen kyseisen switch -rakenteen suorituksen, jolloin ohjelmaa jatketaan
viimeistä aaltosulkua seuraavalta riviltä.
switch($) {
case 1 :
print "Tammikuu";
break;
case 2 :
print "Helmikuu";
break;
case 3 :
print "Maaliskuu";
break;
case 4 :
print "Huhtikuu";
break;
case 5 :
print "Toukokuu";
break;
case 6 :
print "Kesäkuu";
break;
case 7 :
print "Heinäkuu";
break;
case 8 :
print "Elokuu";
break;
case 9 :
print "Syyskuu";
break;
case 10 :
print "Lokakuu";
break;
case 11 :
print "Marraskuu";
break;
case 12 :
print "Joulukuu";
break;
default :
print "Numero ei vastaa mitään kuukautta";
break;
}
Jos esimerkissä muuttujan kuukausi arvo on 5, verrataan sitä ensin
kohdassa case 1 arvoon 1. Koska viisi ei ole yhtäkuin yksi, siirrytään
seuraavaan vertailuun, eli case 2 kohtaan. Näin jatketaan, kunnes tullaan
kohtaan case 5, jossa arvot täsmäävät ja suoritetaan tulostuslause: print
"Toukokuu"; , joka tulostaa näytölle: "Toukokuu". Tämän jälkeen tulee rivi
break; , jolloin ei enää mennä vertaamaan seuraavaan arvoon, eli kuuteen,
vaan siirrytään ohjelman suorituksessa aaltosulun jälkeen seuraavalle
riville.
while(ehtolause) {
komennot
}
Esimerkkiskripti tulostaa numerot yhdestä kymmeneen.
Aluksi alustetaan muuttuja numero ykköseksi. Sen jälkeen mennään suorituksessa
while -riville, jossa ehtolause palauttaa arvon tosi, sillä yksi on pienenpi
kuin kymmenen. Koska ehto oli tosi, siirrytään toteuttamaan aaltosulkeissa
olevia komentoja. Ensin tulostetaan numero, eli nyt luku 1. Seuraavaksi
kasvatetaan muuttujan arvoa yhdellä lukuun kaksi ja palataan uudelleen
while -riville. Koska kaksi on pienenpi kuin kymmenen, saa ehto arvon tosi
ja taas komennot suoritetaan. Näin menetellään, kunnes muuttuja numero on
kasvanut arvoon 11, jolloin ehto saa arvon epätosi ja ohjelmaa jatketaan
viimeisen aaltosulun jälkeiseltä riviltä.
$numero = 1;
// niin kauan kuin numero on yhtä suuri tai pienempi kuin 10
while($numero <= 10) {
print "$numero";
// kasvatetaan muuttujan arvoa yhdellä
$numero++;
}
do {
komennot
} while(ehtolause);
Seuraavassa esimerkissä silmukka suoritetaan vain kerran, koska muuttujan
arvo 15 on suurempi kuin 10, jolloin ehto saa arvon epätosi. Ohjelman
suoritus jatkuu while-riviä seuraavalta riviltä.
$numero = 15;
do {
print "$numero";
$numero++;
} while($numero <= 10);
for(alustuslause; ehtolause; iteraatiolause) {
komennot
}
Ennen silmukan aloitusta suoritetaan alustuslause. Alla olevassa
esimerkissä muuttuja numero alustetaan ykköseksi, joka on siis tämän
silmukan laskurimuuttujan lähtöarvo.
Ehtolause suoritetaan joka kierroksen alussa. Jos ehtolauseen tulos on tosi,
kuten esimerkissä numeron ollessa alle 11, suoritetaan seuraava kierros.
Esimerkin tapauksessa tulostettaisiin ensimmäisellä kierroksella luku yksi
ja toisella luku kaksi ja niin edelleen. Jos tulos on epätosi, jatketaan
ohjelman suoritusta silmukan jälkeen viimeistä aaltosulkua seuraavalta
riviltä. Esimerkissä näin tehdään, kun numero saa arvon 11. Iteraatiolause
suoritetaan joka kierroksen jälkeen. Siinä yleensä muutetaan laskurimuuttujaa
niin, että ehtolause ei palauta enää tosiarvoa kun silmukoita on tehty
riittävä määrä.
/*
lähtöarvo on yksi; suoritetaan silmukka niin kauan kuin
numero on yhtä suuri tai pienempi kuin 10;
kasvatetaan numeron arvoa yhdellä joka kierroksella
*/
for($numero = 1; $numero <= 10; $numero++) {
print "$numero";
}
Funktioita on kahta tyyppiä, sisäänrakennetut funktiot ja käyttäjän määrittelemät funktiot. PHP4:ssä on satoja sisäänrakennettuja funktioita.
Funktio print() eroaa muista funktioista siten, että se ei tarvitse sulkumerkkejä toimiakseen oikein.
print( "Hei maailma" );ja
print "Hei maailma";
toimivat samalla tavalla. Tämä on poikkeus, kaikki muut funktiot tarvitsevat sulut riippumatta siitä onko niillä parametreja.
Funktion kutsu koostuu funktion nimestä, esimerkiksi print, jonka perässä on sulut. Jos funktiolle halutaan välittää tietoa, se tulee laittaa sulkujen sisään. Tällä tavalla välitettyä tietoa kutsutaan parametriksi. Joillekin funktioille täytyy välittää useampia kuin yksi parametri. Tällöin parametrit erotetaan toisistaan pilkulla:
jokin_funktio( $parametri1, $parametri2 );
Useimmat funktiot palauttavat jotain tietoa suoritettuaan tehtävänsä, esimerkiksi onnistuiko tehtävän suorittaminen. Esimerkiksi print() palauttaa boolean -tyyppiä olevan arvon, abs() -funktio taas ottaa parametrinaan etumerkillisen lukuarvon ja palauttaa sen itseisarvon.
Funktio määritellään seuraavasti:
function jokin_funktio( $parametri1, $parametri2 )
{
// tähän funktion runko
}
Jos funktiolle välitetään useampia parametreja kuin yksi, ne tulee erottaa toisistaan pilkulla. Sulkujen käyttö on pakollista vaikka funktiolle ei välitettäisi yhtään parametria. Ainoana poikkeuksena funktio print() joka ei välttämättä tarvitse sulkuja.
Alla on esimerkki parametrittomasta funktiosta. Esimerkin funktio isoHei() ei tarvitse parametreja, eikä se tee muuta kuin tulostaa sanan "HEI!"
<html>
<head>
<title>Esimerkki 1</title>
</head>
<body>
<?php
function isoHei()
{
print "<h1>HEI!</h1>";
}
isoHei();
?>
</body>
</html>
Alla on esimerkki funktiosta, joka tarvitsee parametreja.
<html>
<head>
<title>Esimerkki 2</title>
</head>
<body>
<?php
function tulostaBR( $txt )
{
print ( "$txt<br>\n" );
}
tulostaBR( "Tässä on rivi tekstiä" );
tulostaBR( "Tässä on uusi rivi tekstiä" );
tulostaBR( "Tässä on vielä yksi rivi tekstiä" );
?>
</body>
</html>
Funktion tulostaBR parametri on teksti -muotoa, joten funktiota määriteltäessä sulkujen sisään laitetaan muuttujan nimi $txt. Kaikki mitä funktiolle annetaan parametrina, talletetaan muuttujaan $txt. Funktion rungossa tulostetaan muuttujan $txt sisältö ja lisätään siihen <br> sekä rivinvaihto-merkki. Nyt voidaan käyttää tulostaBR() -aliohjelmaa print() -aliohjelman sijasta. Näin vältytään kirjoittamasta <br> -tagia joka kerta kun halutaan tulostaa tekstiä selaimella.
Funktio voi palauttaa arvon käyttäen return-lausetta arvon tai olion yhteydessä. Return keskeyttää funktion suorituksen ja palauttaa arvon kutsuvalle ohjelmalle.
Alla oleva ohjelma tulostaa luvun kahdeksan. Aliohjelmaa summaaLuvut() tulee kutsua kahdella luvulla, tässä tapauksessa 3 ja 5. Luvut tallennetaan muuttujiin $luku1 ja $luku2. SummaaLuvut() laskee muuttujien arvot yhteen ja tallettaa saadun tuloksen muuttujaan $tulos.
<html>
<head>
<title>Esimerkki 3</title>
</head>
<body>
<?php
function summaaLuvut( $luku1, $luku2 );
{
$tulos = $luku1 + $luku2;
return $tulos;
}
print summaaLuvut( 3, 5 );
// Tulostaa "8"
?>
</body>
</html>
Koodia voidaan optimoida eli helpottaa ja lyhentää return-lauseen avulla niin, että muuttujaa $tulos ei tarvita ollenkaan.
function summaaLuvut( $luku1, $luku2 )
{
return ( $luku1 + $luku2 );
}
Return -lause voi palauttaa olion, arvon tai ei mitään. Se, miten arvo annetaan return -lauseelle, voi vaihdella. Arvo voidaan antaa suoraan:
return 4;
Se voi olla lausekkeen lopputulos:
return( $a / $b );
Se voi olla toisen funktion palauttama arvo:
return( toinen_funktio( $arvo ) );
Funktion nimi on mahdollista antaa merkkijonona muuttujalle ja käyttää muuttujaa kuten käyttäisi funktion nimeä. Alla esimerkki tästä.
<html>
<head>
<title>Esimerkki 4</title>
</head>
<body>
<?php
function sanoHei()
{
print "Hei<br>";
}
$function_holder = "sanoHei";
$function_holder();
?>
</body>
</html>
Funktion nimeä vastaava merkkijono annetaan arvoksi muuttujalle $function_holder. Muuttujaa voidaan käyttää sulkujen kanssa vastaamaan funktion sanoHei() kutsua. Dynaamisesta funktion kutsusta on hyötyä silloin kun halutaan vaikuttaa ohjelman kulkuun olosuhteista riippuen. Skriptin voitaisiin haluta esimerkiksi toimivan eri tavalla riippuen URL:ia kysyvälle merkkijonolle annetusta parametrista. PHP:n sisäänrakennetut funktiot hyödyntävät tätä ominaisuutta. Esimerkiksi funktio array_walk() käyttää merkkijonoa kutsuakseen funktiota taulukon jokaiselle osalle.
Funktion sisällä määritelty muuttuja on paikallinen muuttuja, eli se ei ole muiden aliohjelmien käytössä. Kaksi eri aliohjelman muuttujaa voi siis määritellä samannimisiksi ilman, että ne vaikuttaisivat toisiinsa. Myöskään funktion ulkopuolella määritelty muuttuja ei ole automaattisesti käytössä funktion sisällä. Jos funktion ulkopuolella yritetään esimerkiksi tulostaa funktion sisäpuolella määritettyä muuttujaa, se ei tulostu. Yritys käyttää tällaista olematonta muuttujaa ei kuitenkaan aiheuta virhettä.
Funktion sisällä ei ole mahdollista käyttää jossain muualla määriteltyä muuttujaa. Jos yrittää käyttää samannimistä muuttujaa, käytetään silloin ainoastaan paikallista muuttujaa, ei muualla määriteltyä. Alla oleva ohjelma ei siis tulosta muuttujan arvoa. Ohjelma ei kuitenkaan kaadu, se vain jättää tulostamatta muuttujan arvon.
<html>
<head>
<title>Esimerkki 5</title>
</head>
<body>
<?php
$elama = 42;
function elamanTarkoitus()
{
print "Elämän tarkoitus on $elama<br>";
}
elamanTarkoitus();
?>
</body>
</html>
Näin vältetään samannimisten muuttujien väliset sekaannukset, ja jos funktio tarvitsee ulkopuolista eli yleistä muuttujaa, se voidaan antaa sille parametrina. Joskus voidaan kuitenkin haluta käyttää yleistä muuttujaa ilman, että välitetään sitä aliohjelmalle parametrina. Tällöin voidaan käyttää yleistä lausetta.
<html>
<head>
<title>Esimerkki 6</title>
</head>
<body>
<?php
$elama=42;
function elamanTarkoitus()
{
global $elama;
print "Elämän tarkoitus on $elama<br>";
}
elamanTarkoitus();
?>
</body>
</html>
Kun muuttujan $elama eteen lisätään sana global, saadaan muuttuja viittaamaan yleiseen muuttujaan $elama, joka on määritelty funktion ulkopuolella. Global -lausetta täytyy käyttää kaikissa aliohjelmissa, jotka haluavat käyttää jotain yleistä muuttujaa. Huomaa, että jos yleistä muuttujaa muutetaan funktion sisällä, muutokset näkyvät myös ulkopuolella.
class eka_luokkaLuokasta voidaan luoda olio tai olioita new -lauseella.
{
// Määrittelyjä
}
$uusi_olio = new eka_luokka();Näin luotiin olio nimeltä uusi_olio, jota voidaan käyttää ohjelmassa. Luodulla oliolla ei kuitenkaan ollut luokan määrittelyssä mitään ominaisuuksia. Määritellään seuraavaksi sama luokka uudestaan.
class eka_luokkaLuokan sisään määriteltiin muuttuja $arvo. Luokan sisäisiä muuttujia määriteltäessä tulee käyttää muuttujan edessä var -sanaa. Luodaan luokasta nyt olio:
{
var $arvo = 10;
}
$uusi_olio = new eka_luokka();Oliolla on yksi ominaisuus. Ominaisuuden käyttämiseen tarvitaan nuolioperaattoria (->).
echo"$uusi_olio->arvo <br>";Tuolstuslause tulostaa luvun 10 sekä rivinvaihtomerkin. Olion ominaisuutta voi myös muuttaa :
$uusi_olio->arvo = 12;Nyt tulostuisi luku 12. Olion ominaisuutena voi olla myös esim. taulukko tai jopa toinen olio.
echo"$uusi_olio->arvo <br>";
class eka_luokka
{
var $arvo = 10;
function sanoJotain()
{
echo"Hei Maailma ! <br>";
}
}
Luokasta luotavalla oliolla on käytössään metodi sanoJotain.
Metodia kutsutaan nuolioperaattorilla.
$uusi_olio->sanoJotain();Metodilla voidaan muuttaa olion ominaisuuksia. Määritellään nyt luokkaan tälläinen metodi.
class eka_luokka
{
var $arvo = 10;
function asetaArvo($n)
{
$this->arvo = $n;
}
}
$uusi_olio = new eka_luokka();
echo"$uusi_olio->arvo <br>";
// Tulostaa 10
$uusi_olio->asetaArvo(12);
echo"$uusi_olio->arvo <br>";
// Tulostaa 12
Metodi asetaArvo saa argumentin $n,
joka asetetaan muuttujan $arvo arvoksi. Erikoismuuttuja $this tarkoittaa oliota itseään. Olioon
voitaisiin viitata sen omalla nimellä, mutta nimi ei ole tässä
vaiheessa vielä ohjelman tiedossa.
class eka_luokka
{
var $arvo;
function eka_luokka($n = 0) //Muodostin
{
$this->arvo = $n;
}
}
$uusi_olio = new eka_luokka(12);
echo"$uusi_olio->arvo <br>";
// Tulostaa 12
$toinen_olio = new eka_luokka();
echo"$toinen_olio->arvo <br>";
// Tulostaa 0
Muodostimen argumentin arvoksi on määrittelyvaiheessa annettu 0.
Tätä käytetään arvona jos muuta arvoa ei anneta.
class eka_luokka
{
var $arvo;
function eka_luokka($n = 0)
{
$this->arvo = $n;
}
}
class toka_luokka extends eka_luokka
{
// Extends periyttää toiminnan
}
$joku_olio = new toka_luokka(12);
echo"$joku_olio->arvo <br>";
// Tulostaa 12
Esimerkissä määriteltyyn luokkaan toka_luokka periytyi muuttujan
$arvo lisäksi myös muodostinfunktio. Se voitaisiin tarvittaessa
määritellä perivälle luokalle erikseen. Perivä luokka
(eli lapsiluokka) sisältää
siis kantaluokkansa toiminnan, mutta siihen voi lisätä myös
uusia ominaisuuksia.
class eka_luokka
{
var $arvo;
function eka_luokka($n)
{
$this->arvo = $n;
}
function sanoJotain()
{
echo"Olen eka_luokan olio ! <br>";
}
}
class toka_luokka extends eka_luokka
{
function sanoJotain()
{
echo"Olen toka_luokan olio ! <br>";
}
}
$eka_olio = new eka_luokka(15)
$eka_olio->sanoJotain();
// Tulostaa Olen eka_luokan olio !
$joku_olio = new toka_luokka(15);
$joku_olio->sanoJotain();
// Tulostaa Olen toka_luokan olio !
Esimerkissä lapsiluokalla toka_luokka oli samanniminen metodi kuin kantaluokalla
eka_luokka. Metodien toiminta on kuitenkin erilainen. Tätä
sanotaan metodin korvaamiseksi.
class toka_luokka extends eka_luokka
{
function sanoJotain();
{
echo"Olen toka_luokan olio ! <br>";
eka_luokka::sanoJotain(); // Kutsutaan kantaluokan (eka_luokka) metodia
}
}
$joku_olio = new toka_luokka(15);
$joku_olio->sanoJotain();
// Tulostaa Olen toka_luokan olio !
// Olen eka_luokan olio !
| Sisällysluettelo |
|