350 likes | 514 Views
PHP osa 1. Verkkotekniikan jatkokurssi Kevät 2003 Ville Seppänen (rissepp@cc.jyu.fi). Sisältö. Yleistä Skriptien kirjoittaminen Muuttujista Operaattoreista Funktioiden määrittely ja käyttäminen include ja require Kontrollirakenteista Taulukoista. PHP:n käyttötilasto helmikuu 03.
E N D
PHP osa 1 Verkkotekniikan jatkokurssi Kevät 2003 Ville Seppänen (rissepp@cc.jyu.fi)
Sisältö • Yleistä • Skriptien kirjoittaminen • Muuttujista • Operaattoreista • Funktioiden määrittely ja käyttäminen • include ja require • Kontrollirakenteista • Taulukoista
Yleistä (1) • Alkoi 1994 yhden miehen, Rasmus Lerdorfin, projektina Personal Home Page • Nykyisin useita kehittäjiä, vapaa Open Source projekti, nimi muuttunut muotoon PHP Hypertext Preprocessor • Viimeisin versio 4.3.1 (www.php.net) • Kehityksessä oleva versio 5 tulee muuttamaan PHP:n enemmän oliokielen suuntaan
Yleistä (2) • ‘Serverside HTML-embedded scripting language’ • PHP-skripti kirjoitetaan tavallisesti HTML-koodin sekaan • Asiakkaan pyytäessä skriptiä sisältävää dokumenttia palvelimelta, palvelin suorittaa dokumenttiin upotetun koodin • ja (tavallisesti) palauttaa vastauksena staattisen HTML-dokumentin • HTTP ja HTML asettavat tiettyjä rajoituksia • Suunniteltu web-käytöön • Paljon valmiita funktioita yleisiin käyttötarkoituksiin; esim. grafiikan ja PDF-dokumenttien generointi, sähköpostin lähettäminen, cookieiden käsittely, yhteydet muihin verkkopalveluihin ja erilaisiin tietokantoihin jne.
Yleistä (3) • Syntaksi perustuu muihin ohjelmointikieliin, pääasiassa C:hen ja Perliin. Piirteitä myös C++:sta ja Javasta. Mahdollista kirjoittaa oliotyyliin. • Siirrettävää: koodi toimii ilman muutoksia tai pienin muutoksin (hakemistoviittaukset jne.) erilaisilla alustoilla (vapaat ja kaupalliset Unixit, Windowsit jne.) sekä lukuisissa WWW-palvelimissa laajennusmodulien avulla, esim. Apache ja MS IIS
Yleistä (4) • Verrattaessa ‘kilpailijoihinsa’ (esim. Perl, ASP, JSP, Cold Fusion) PHP:n vahvuuksia ovat: • Suorituskyky • Liittymä useille tietokannoille • Sisäänrakennetut kirjastot yleisille web-sovelluksiin liittyville tehtäville • Edullinen ( ilmainen) • Helppo oppia ja käyttää • Siirrettävyys • Lähdekoodin saatavuus (Welling & Thomson, 2001) • Koodin pituus PHP:lla toteutettuna on tyypillisesti vain murto-osan esim. vastaavasta Perl-koodista
Skriptin kirjoittaminen (1) • Palvelin tunnistaa PHP-skriptiä sisältävät tiedostot tiedostonimen päätteen perusteella, yleensä .php, .php3, .php4 tai .phtml (hyväksytyt päätteet riippuvat palvelimen asetuksista) • PHP-skriptit kirjoitetaan <? ?> tai <?php ?> merkkiparien sisälle (suosi jälkimmäistä muotoa)
Skriptin kirjoittaminen (2) <html> <head> <title>Päiväys<title> </head> <body> <p> <?php // PHP-koodi alkaa echo “Tänään on: “; echo time(“d-m-Y”); ?> // PHP-koodi loppuu </p> </body> </html>
Skriptin kirjoittaminen (3) <?php $myString = ‘Hello, world!’; ?> <h1> <?php echo $myString; ?> </h1> <?php $myString = ‘Hello, world!’; echo “<h1>$myString</h1>”; ?> <?php $myString = ‘Hello, world!’; echo “<h1>”.$myString.”</h1>”; ?> <?php echo “<h1 class=\”iso\”>Iso otsikko</h1>”; echo “<h1 class=‘iso’>Toinen iso otsikko</h1>”; ?> <for method=“get” action=“<?php echo $PHP_SELF ?>”>
Skriptien kirjoittaminen (4) • PHP-sovellus voidaan kirjoittaa kokonaisuudessaan yhteen tiedostoon tai se voidaan pilkkoa loogisesti erillisiin skripteihin if($page==‘kirjoita’) { /* kirjoittamiseen liittyviä juttuja */ } else if($page==‘lue’) { /* lukemiseen liittyviä juttuja */ } else { /* jotain muuta */ } index.php kirjoita.php lue.php
Muuttujista (1) • PHP:ssa muuttujia ei tarvitse julistaa. Muuttuja luodaan, kun sille asetetaan arvo, ja muuttujan tyyppi määräytyy automaattisesti arvon tyypin mukaan $myInterger = 1; $myString = “Hello, world!”; $myArray = array(“Hello”, “world!”); echo gettype($myInteger); // integer echo gettype($myString); // string echo gettype($myArray); // string
Muuttujista (3) • Muuttujien arvoja voidaan välittää skripteille GET tai POST-kutsujen mukana • Muuttujien siirtäminen URLissa (GET-metodi) http://www.palvelin.net?sivu=etusivu&kieli=suomi muuttuja arvo • POST lähettää datan HTTP-kutsun mukana, mutta sitä ei siirretä osana URLia Ei GETin fyysistä pituusrajoitusta ja mahdollistaa multipart/form-data enkoodauksen.
Muuttujista (2) • PHP:n tietotyypit • Boolean (PHP4), kaksiarvoinen • Integer, kokonaisluku • Float, liukuluku • String, merkkijono • Array, taulukko • Object • Luokan ilmentymä oliokoodissa • Resource (PHP4) • Sisältää viittauksen ulkoiseen resurssiin. Resurssit luodaan ja niitä käsitellään määrätyillä funktioilla (esim. tietokantakyselyn suorittava funktio ja sen palauttama resurssimuuttuja)
Vertailu- ja loogiset operaattorit • PHP:n vertailuoperaattorit: • == equals (sama arvo) • === identical (sama arvo ja sama tietotyyppi) • != not equal • <> not equal • < less than • > greater than • <= less than or equal to • >= greater than or equal to • PHP:n loogiset operaattorit: • ! NOT • && AND • | | OR
Muita operaattoreita • Ternary operaattori Yleinen muoto: condition ? value if true : value if false Esim: $answer = ($color == “red” ? “Color is red” : “Color is not red”); • Error suppression operaattori $a = @(57/0); • Execution operaattori $out = ‘ls -la’; echo “<pre>”.$out.”</pre>”;
Funktiot (1) • Funktioiden nimeäminen ja määrittely • Nimissä sallitaan kirjain- ja numeromerkit, sekä alaviiva • Nimi ei saa alkaa numerolla • Nimi ei saa olla varattu sana • Nimi ei saa olla valmiin funktion nimi // funktion määrittely function omaFunktio() { echo “Moro!”; } // funktion kutsu omaFunktio();
Funktiot (2) • Esimerkkejä funktion kutsumisesta: omaFunktio(); // kutsutaan ilman parametreja omaFunktio(“iso”); // string-parametrilla omaFunktio(15.23); // float-parametrilla omaFunktio($muuttuja); // muuttujaparametrilla omaFunktio($muuttuja, “iso”); // muuuttuja- ja string-param. // funktio vaatii parametrin: function omaFunktio($koko) { echo “Koko on $koko.”; } omaFunktio(“iso”); // tulostaa: Koko on iso.
Funktiot (3) • Parametreille voidaan antaa arvo funktion määrittelyssä. Tällöin niille ei funktiota kutsuttaessa vaadita arvoa. pakollinen optionaalinen function omaFunktio($muoto, $koko = “iso”) { echo “Muoto on $muoto ja koko on $koko.”; } omaFunktio(); // warning: missing argument omaFunktio(“soikea”); // Muoto on soikea ja koko on iso. omaFunktio(“soikea”, “pieni”); // Muoto on soikea ja koko on pieni.
Funktiot (4) • Muuttujien vaikutusalue (scope) • Funktion sisällä määritellyt muuttujat ovat voimassa vain ko. funktion sisällä (local variables) • Funktion ulkopuolella määritellyt muuttujat eivät ole voimassa funktioiden sisällä (global variables) • Avainsana global pakottaa muuttujan globaaliksi, vaikka se määriteltäisiin funktion sisällä • include() ja require() eivät vaikuta muuttujan vaikutusalueeseen
Funktiot (5), esim. vaikutusalueista function omaFunktio() { $muuttuja = “foo”; } echo $muuttuja; // ei tulostetta function omaFunktio() { echo “Funktion sisällä, \$muuttuja = “.$muuttuja.”<br />”; $muuttuja = “bar”; echo “Funktion sisällä, \$muuttuja = “.$muuttuja.”<br />”; } $muuttuja = “foo”; omaFunktio(); Echo “Funktion ulkopuolella, \$muuttuja = “.$muuttuja.”<br />”; Tuloste: Funktion sisällä, $muuttuja = Funktion sisällä, $muuttuja = bar Funktion ulkopuolella, $muuttuja = foo
Funktiot (6) • Esimerkki globalin käytöstä: function omaFunktio() { global $muuttuja; $muuttuja = “foo”; echo “Funktion sisällä, \$muuttuja = “.$muuttuja.”<br />”; } omaFunktio(); echo “Funktion ulkopuolella, \$muuttuja = “.$muuttuja.”<br />”; Tuloste: Funktion sisällä, $muuttuja = foo Funktion ulkopuolella, $muuttuja = foo
Funktiot (7) • Muuttuja voidaan välittää funktiolle käyttämällä sen arvoa (pass by value) tai viittausta alkuperäiseen muuttujaan (pass by reference) • Pass by value:ta käytettäessä muuttujan globaali arvo ei muutu: • Pass by referencen käyttö määritellään kirjoittamalla parametrin eteen &-merkki: function kertaa10(&$luku) { $luku = ($luku * 10); } $luku = 10; kertaa10($luku); echo $luku; // tuloste 100 function kertaa10($luku) { $luku = ($luku * 10); } $luku = 10; kertaa10($luku); echo $luku; // tulostaa 10
Funktiot (8) • Arvojen palauttaminen • Avainsana return lopettaa funktion suorittamisen ja ohjelman suorittamista jatketaan funktion kutsua seuraavasta lauseesta • returnia voidaan käyttää myös arvojen palauttamiseen funktiosta. function random($min = 1, $max = 100) { $random = rand($min, $max); return($random); } $satunnainen = random(); $iso_satunnainen = random(1000, 10000); function taustaVari($rivinumero) { if(($rivinumero % 2) == 0) return(“silver”); else return(“gray”); } • Ehdollinen arvon palauttaminen:
include ja require (1) • includen käyttö helpottaa koodin hallintaa, jäsentämistä ja vähentää redundanssia • Usein tarvittavat koodinpätkät (esim. tietokantayhteyden muodostaminen) • Kirjastot • Teksti ja HTML-koodi (esim. heading, footer, layout, …) • require toimii includen tavoin, mutta liitettävän tiedoston puuttuminen keskeyttää koodin suorituksen, kun taas include ainoastaan tulostaa varoituksen
include ja require (2) • require_once toimii requiren tavoin, mutta liittäminen tehdään ainoastaan mikäli sitä ei ole aiemmin tehty. <?php // avaataan tietokantayhteys - db.inc $db = mysql_connect(“localhost”, “sqluser”, “sqlpassword”); if(!$db) echo “Cannot connect to database”; else mysql_select_db(“mydb”); ?> <?php include(“./includes/db.inc”); ?>
include ja require (3) • Jos liitettävä tiedosto sisältää PHP-koodia, koodi tulee kirjoittaa PHP-tagien sisälle. Muutoin koodia ei suoritetaan vaan se liitetään mukaan tekstinä. • Liitettäviä tiedostoja nimettäessä tulee käyttää ainoastaan loppupäätteitä, jotka WWW-palvelin käsittelee PHP-skripteinä. Muutoin tiedoston sisältö esitetään selaimessa tekstinä.
Kontrollirakenteista (1) • if, else if ja else • Jos if-ehto on tosi, sitä seuraava koodi(blokki) suoritetaan • Muussa tapauksessa, jos else if-ehto on tosi, sitä seuraava koodi(blokki) suoritetaan • Muussa tapauksessa, else:ä seuraava koodi(blokki) suoritetaan if($i == 10) { echo “\$i on 10”; } else if($i == 5) { echo “\$i on 5”; } else { echo “\i$ on jotain muuta kuin 5 tai 10”; }
Kontrollirakenteista (2) • Ehtovertailuesimerkkejä: if($i < 10 || $i > 20) // OR if($a == TRUE && $b == FALSE) // AND if(!$login) // NOT if(!isset($login)) // NOT • switch ja case: switch($i) { case “10” : echo “\$i on 10”; break; case “5” : echo “\$i on 5”; break; }
Kontrollirakenteista (3) • while ja do while while ($i <= 10) { echo “$i <br />”; $i++; } /* --------------------------- */ $i = 11; do { echo “$i <br />”; $i+ } while ($i <= 10); • do while-rakenteessa ehto tarkistetaan lopussa, joten silmukka suoritetaan aina vähintään kerran
Kontrollirakenteista (4) • for // testataan ehtoa $i <= 10. Kun epätosi, suorittaminen loppuu for($i = 1; $i <= 10; $i++) { echo “$i <br />”; } • Kontrollirakenteiden suorittaminen voidaan lopettaa milloin vain exit:llä • Lisää: http://www.php.net/manual/en/control-structures.php
Taulukot [array] (1) • Yksi tai useampi ulotteinen joukko tunniste (index tai key) – arvo (value) -pareja • Tunniste voi olla joko kokonaisluku tai merkkijono • Arvo voi olla mikä tahansa, myös toinen array (moniuloitteiset taulukot) • Demojen puitteissa taulukoihin törmätään ainakin lomakkeita ja tietokantakyselyn tuloksia käsiteltäessä
Taulukot (2) <form action="kasittelija.php" method="get"><br />Nimi: <input type="text" name="nimi" size="30” /><br />Email: <input type="text" name="email" size="30” /><br />Viesti: <textarea name="viesti" rows="3" cols="25”/></textarea><br /><input type="submit" name="submit" value="Lähetä” /></form> Viittaaminen yksittäiseenelementtiin: $_GET[nimi]; print_r($_GET); // kasittelija.php Tuloste: $_GET-muuttujan (array) sisältö Array( [nimi] => Santa Claus [email] => joulupukki@korvatunturi.fi [viesti] => Hyvää joulua! [submit] => Lähetä )
Taulukot (3) • Taulukon muodostaminen: $myArray = array(“Santa”, “Ho ho ho!”); // tunnisteet asetetaan automaattisesti kokonaislukuina nollasta alkaen $myArray = array(nimi => “Santa”, viesti => “Ho ho ho!”); // tunnisteet $myArray[nimi] ja $myArray[viesti] • Suoraan arvot asettamalla: $myArray[0] = “Santa”; $myArray[1] = “Ho ho ho!”; $myArray[nimi] = “Santa”; $myArray[viesti] = “Ho ho ho!”;
Taulukot (4) • Taulukoiden käsitteleminen • Numeeriset tunnisteet mahdollistavat taulukon käsittelemisen esim. for-silmukassa for($i = 0; $i < count($myArray)-1; $i++) echo “$myArray[$i]<br />”; • list ja each while (list($tunniste, $arvo) = each($myArray)) echo “$tunniste - $arvo <br />”; • foreach foreach($myArray as $tunniste => $arvo) echo “$tunniste - $arvo <br />”; • Lue lisää: http://www.php.net/manual/en/ref.array.php