Ero sivun ”PHP” versioiden välillä

Poistettu sisältö Lisätty sisältö
Kenkku (keskustelu | muokkaukset)
→‎Ulkoasu: siirretty sivulle PHP/Ulkoasu
Kenkku (keskustelu | muokkaukset)
→‎Kielen perusominaisuudet: siirretty sivulle PHP/Perusominaisuudet
Rivi 46:
 
 
== Kielen perusominaisuudet ==
 
Jokaisella ohjelmointikielellä on omat perusominaisuutensa. Tämä kappale käsittelee PHP:n perusominaisuuksia kuten ''[[#Perussyntaksi|perussyntaksia]], [[#Muuttujatyypit|muuttujatyyppejä]], [[#Muuttujat|muuttujia]]'' ja ''[[#Operaattorit|operaattoreita]]''. Aivan lopusta löytyy vielä ''[[#Muuta huomioitavaa|muuta huomioitavaa]]'' joka käsittelee yleisiä kohtia kielen perusominaisuuksista.
 
=== Perussyntaksi ===
 
Perussyntaksi eli ''koodin kielioppi'' määrittelee, miten kielelle kerrotaan tulkittavat lausekkeet, ja missä muodossa ne kerrotaan.
 
==== Koodilohkon merkitseminen ====
 
# Suositeltu tapa merkitä koodilohkon alku ja loppu on ''<?php'' ja ''?>'' (niin kutsuttu pitkä aloitustagi). Tämä tapa on turvallisin siinä mielessä, että se ei sekoitu esimerkiksi [[XHTML]]-määrityksen <? -aloitukseen, joka aiheuttaa monille aloitteleville PHP-koodaajille päänvaivaa luomalla virheen PHP:n tulkkauksessa.
# On myös mahdollista käyttää lyhyttä aloitustagia ''<?'' ja ''?>''(''short_open_tag''). Tässä on kuitenkin riskinä se, että PHP:n ulkopuolella tulostettava XHTML-määritys aiheuttaa PHP-tulkille virheen. Vaikka PHP:ssa on määritelty ''short_open_tag''-asetus on-tilaan oletuksena, ovat useat palvelimet poistaneet tämän ominaisuuden käytöstä.
# Tarvittaessa voidaan käyttää myös ''script''-aloitustagia. Tässä haittapuolena on se, että PHP:n sisällä tulostettava &lt;/script&gt; saattaa aiheuttaa virheellisesti toimivaa koodia.
# [[ASP]]:n aloitustagi on niin ikään hyväksyttyjen aloitustagien listalla. Tällöin ASP:n ja PHP:n yhteiskäyttö ei ole kuitenkaan mahdollista.
 
 
<div style="width: 80%; clear: both">
'''Esimerkkejä erilaisista koodilohkon merkintätavoista''':
<pre><nowiki>
<!-- Pitkä aloitustagi, suositeltu tapa -->
<?php echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>'; ?>
 
<!-- Lyhyt aloitustagi, saattaa aiheuttaa ongelmia etenkin XHTML-sivujen kanssa -->
<? echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>'; ?>
 
<!-- script-aloitustagi, niin ikään ongelmainen etenkin tulostettaessa script-lohkoja PHP:n sisällä -->
<script language="php">
echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>';
</script>
 
<!-- ASP-tyylinen aloitustagi, estää ASP:n ja PHP:n yhteiskäytön -->
<% echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>'; %>
</nowiki></pre>
</div>
 
==== Lausekkeiden erottelu ====
PHP:ssa, samoin kuin C:ssa tai Perlissa, lauseet erotetaan toisistaan puolipisteen (;) avulla. Käytännössä tämä useimmiten tarkoittaa, että koodin rivit on päätettävä puolipisteeseen. Koodilohkon viimeistä riviä ei kuitenkaan välttämättä tarvitse sulkea, vaan PHP luo automaattisesti ennen lopetustagia puolipisteen.
 
<div style="width: 80%; clear: both">
'''Esimerkkejä tavoista sulkea lauseke'''
<pre><nowiki>
<?php
echo "Hei, maailma!";
?>
 
<?php echo "Hei, maailma!"; ?>
 
<?php
echo "Hei, maailma!"
?>
 
<?php echo "Hei, maailma!" ?>
</nowiki></pre>
</div>
 
PHP-tulkki jättää kommenttien lisäksi huomioimatta puolipisteellä suljetut tyhjät (ei mitään tai vain tulostumattomia merkkejä sisältävät) rivit.
 
==== Kommentointi ====
 
PHP tukee useita erilaisia kommentointityyppejä, niin yksirivisiä kuin monirivisiäkin.
 
<div style="width: 80%; clear: both">
'''Esimerkkejä erilaisista kommentointityyleistä'''
<pre><nowiki>
<?php
 
// Tämä on tavanomaisin tapa kommentoida yksirivisenä kommenttina
echo "Hei "; // Myös lausekkeen lopussa
 
# Myös shell-tyylinen kommentointi on mahdollista
echo "maailma!"; # Myös lausekkeen lopussa
 
/* Tämä on
monirivinen
\\\/// kommentti
joka ***
päättyy vasta
lopetusmerkkiin */
 
?>
</nowiki></pre>
</div>
 
Kommenttien käyttötarkoituksina on:
 
# Pitkien koodien avaaminen ja selkeyttäminen kertomalla mitä koodi kulloinkin "tekee"
# Eri osa-alueiden erottelu visuaalisesti
# Koodilohkojen ja yksittäisten lausekkeiden käytöstä poisto
# Skriptin kehittelijöiden mainitseminen skriptin alussa
 
Tulkattaessa PHP:tä tulkki jättää huomioimatta kommentit, eikä kommentointi juuri lainkaan hidasta suoritusta.
=== Muuttujatyypit ===
 
 
{| width="80%" border="0" cellspacing="0" cellpadding="3" style="border: solid 1px #000000"
|-
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''[[Suomen kieli|Suomenkielinen nimi]] *'''
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''[[Englannin kieli|Englanninkielinen nimi]]'''
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''Tyyppimuunnos **'''
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''Esimerkki'''
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc;" | '''Skaalautuvat muuttujatyypit'''
|-
| '''totuusarvo'''
| boolean
| bool, boolean
| <pre>TRUE, FALSE</pre>
|-
| '''kokonaisluku'''
| integer
| int, integer
| <pre>123, +123, -123, 0123, 0x1A, 2147483647</pre>
|-
| '''liukuluku'''
| float, double
| float, double, real
| <pre>1.23, +1.23, -1.23, 1.2e3, 7E-10</pre>
|-
| '''merkkijono ***'''
| string
| string
| <pre>'Hei, maailma!', "Hei, maailma!"</pre>
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc; border-top: solid 2px #cccccc" | '''Yhdistelmämuuttujatyypit'''
|-
| '''taulukko'''
| array
| array
| <pre>array ("yksi", "kaksi", "kolme", 1, 1.23)</pre>
|-
| '''objekti'''
| object
| object
| <pre>-</pre>
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc; border-top: solid 2px #cccccc" | '''Erikoismuuttujatyypit'''
|-
| '''resurssi'''
| resource
| -
| <pre>-</pre>
|-
| '''tyhjä'''
| NULL
| -
| <pre>-</pre>
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc; border-top: solid 2px #cccccc" | '''Pseudomuuttujatyypit'''
|-
| -
| mixed
| -
| <pre>-</pre>
|-
| '''numeraali'''
| number
| -
| <pre>-</pre>
|-
| -
| callback
| -
| <pre>-</pre>
|}
 
<p style="font-size: 0.8em">'''*''' vain suomen kielessä vakiintuneet termit
<br />'''**''' lyhenteet joita käytetään [http://www.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting tyyppimuunnoksissa]
<br />'''***''' katso myös [http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc heredoc-syntaksi]</p>
 
=== Muuttujat ===
Muuttujia käytetään tallentamaan tietoa, joka saadaan joko itse koodista, tietokannasta, käyttäjältä tai vaikkapa palvelimelta. Muuttujien käyttö ja hallinta on PHP:ssä moniin muihin ohjelmointikieliin verrattuna yksinkertaista siksi, että niiden tyyppiä ei tarvitse itse määrittää vaan se päätellään automaattisesti muuttujalle annetusta arvosta. Muuttujalle pitää kuitenkin antaa arvo ennen kuin sitä voidaan käyttää muualla koodissa.
 
Muuttuja merkitään dollarimerkillä $ ja tunnisteella, jossa sallittuja merkkejä ovat ovat kirjaimet A&ndash;Z sekä ASCII-merkistön merkit 127 &ndash; 255 (sisältäen skandinaaviset sekä yleisimmät eurooppalaiset merkit), alaviiva _ ja numerot 0&ndash;9. Muuttujan nimi (dollarin $ jälkeinen osa) ei kuitenkaan voi alkaa numerolla. Muuttujat ovat myös kirjainkokoriippuvaisia, jolloin muuttuja $heimaailma on eri muuttuja kuin $HeiMaailma. Järkevintä on luonnollisesti valita muuttujan tunnisteeksi sen tehtävää kuvaava nimi.
 
==== Muuttujien lisääminen merkkijonoon ====
Seuraavassa esimerkissä tehdään sama toimenpide kuin kahdessa aikaisemmassa koodissa, mutta nyt käytetään hyväksi muuttujia:
<?php
$tervehdys = 'Hei, maailma!'; // Tallennetaan teksti muuttujaan
echo $tervehdys; // Käytetään äskettäin luotua muuttujaa ja tulostetaan sen sisältämä teksti
?>
 
Jos muuttuja halutaan sijoittaa suoraan toisen merkkijonon sisään, voidaan menetellä kahdella tavalla.
 
Ensimmäisessä esimerkissä muuttuja lisätään ketjutusoperaattorilla, joka liittää merkkijonot yhteen. Ketjutusoperaattoria voi käyttää sekä lainausmerkkien, että heittomerkkien kanssa:
<?php
$käyntikerrat = 3; // Tallennetaan luku muuttujaan. Huomaa, että ääkkösien käyttö on sallittu php:ssa
echo "Hei, olet käynyt täällä" . $käyntikerrat . "kertaa."; // Hei, olet käynyt täällä 3 kertaa.
echo 'Hei, olet käynyt täällä' . $käyntikerrat . 'kertaa.'; // Hei, olet käynyt täällä 3 kertaa.
?>
 
Muuttujan voi liittää lainausmerkkejä käytettäessä myös suoraan merkkijonoon:
<?php
$käyntikerrat = 3; // Tallennetaan luku muuttujaan. Huomaa, että ääkkösien käyttö on sallittu php:ssa
echo "Hei, olet käynyt täällä {$käyntikerrat} kertaa."; // Hei, olet käynyt täällä 3 kertaa.
echo "Hei, olet käynyt täällä ${käyntikerrat} kertaa."; // Hei, olet käynyt täällä 3 kertaa.
echo "Hei, olet käynyt täällä $käyntikerrat kertaa."; // Hei, olet käynyt täällä 3 kertaa.
?>
 
Kun käytetään heittomerkkejä, ei merkkijonon sisällä voi käyttää muuttujia:
<?php
$käyntikerrat = 3; // Tallennetaan luku muuttujaan. Huomaa, että ääkkösien käyttö on sallittu muuttujien nimessä
echo 'Hei, olet käynyt täällä {$käyntikerrat} kertaa.'; // Hei, olet käynyt täällä {$käyntikerrat} kertaa.
?>
 
=== Operaattorit ===
 
 
{| width="80%" border="0" cellspacing="0" cellpadding="3" style="border: solid 1px #000000"
|-
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''Operaattori'''
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''[[Suomen kieli|Suomenkielinen nimi]] '''
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''[[Englannin kieli|Englanninkielinen nimi]]'''
| style="background-color: #cccccc; border-bottom: solid 1px #000000; white-space: nowrap" | '''Esimerkki'''
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc;" | '''[[Matematiikka|Matemaattiset]] operaattorit'''
|-
| align="center" | '''+'''
| yhteenlasku
| addition
| <pre>$a = 5 + 3;</pre>
|-
| align="center" | '''-'''
| vähennyslasku
| subtraction
| <pre>$a = 5 - 3;</pre>
|-
| align="center" | '''*'''
| kertolasku
| multiplication
| <pre>$a = 5 * 3;</pre>
|-
| align="center" | '''/'''
| jakolasku
| division
| <pre>$a = 5 / 3;</pre>
|-
| align="center" | '''%'''
| jakojäännös
| modulus
| <pre>$a = 5 % 3;</pre>
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc; border-top: solid 2px #cccccc" | '''Sijoitusoperaattorit'''
|-
| align="center" | '''='''
| sijoita
| assign
| <pre>$a = 5;</pre>
|-
| align="center" | '''+='''
| lisää ja sijoita
| add and assign
| <pre>$a += 5; /* vastaa */ $a = $a + 5;</pre>
|-
| align="center" | '''-='''
| vähennä ja sijoita
| subtract and assign
| <pre>$a -= 5; /* vastaa */ $a = $a - 5;</pre>
|-
| align="center" | '''*='''
| kerro ja sijoita
| multiple and assign
| <pre>$a *= 5; /* vastaa */ $a = $a * 5;</pre>
|-
| align="center" | '''/='''
| jaa ja sijoita
| divine and assign
| <pre>$a /= 5; /* vastaa */ $a = $a / 5;</pre>
|-
| align="center" | '''%='''
| jakojäännös sijoitettavasta
| modulus from assign
| <pre>$a %= 5; /* vastaa */ $a = $a % 5;</pre>
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc; border-top: solid 2px #cccccc" | '''Vertailuoperaattorit'''
|-
| align="center" | '''=='''
| löyhä vertailu
| loose comparison
| <pre>$a == 5</pre>
|-
| align="center" | '''==='''
| tiukka vertailu
| strict comparison
| <pre>$a === 5</pre>
|-
| align="center" | '''&gt;'''
| suurempi kuin
| greater than
| <pre>$a &gt; 5</pre>
|-
| align="center" | '''&lt;'''
| pienempi kuin
| less than
| <pre>$a &lt; 5</pre>
|-
| align="center" | '''&gt;='''
| suurempi tai yhtä suuri kuin
| greater or equal to
| <pre>$a &gt;= 5 /* vastaa */ $a &gt; 5 &#124;&#124; $a == 5</pre>
|-
| align="center" | '''&lt;='''
| pienempi tai yhtä suuri kuin
| less or equal to
| <pre>$a &lt;= 5 /* vastaa */ $a &lt; 5 &#124;&#124; $a == 5</pre>
|-
| align="center" | '''<>, !='''
| erisuuri kuin
| different than
| <pre>$a &lt;&gt; 5 /* vastaa */ $a &lt; 5 &#124;&#124; $a &gt; 5</pre>
|-
| align="center" | '''!=='''
| erisuuri tai eri tyyppiä kuin
| different or different type than
| <pre>$a !== 5</pre>
|-
| align="center" | '''? :'''
| vertaileva sijoitus
| ternary
| <pre>$a = $a < 5 ? 0 : 10;</pre>
|-
| colspan="4" style="background: #efefef; border-bottom: solid 2px #cccccc; border-top: solid 2px #cccccc" | '''Loogiset operaattorit'''
|-
| align="center" | '''AND, &amp;&amp;'''
| ja
| and
| <pre>$a == 5 &amp;&amp; $a != 10</pre>
|-
| align="center" | '''OR, &#124;&#124;'''
| tai
| or
| <pre>$a == 5 &#124;&#124; $a != 10</pre>
|-
| align="center" | '''XOR'''
| poissulkeva tai
| xor
| <pre>$a == 5 XOR $a != 10</pre>
|}
 
=== Muuta huomioitavaa ===
 
# PHP on heikosti tyypitetty kieli. Tämä tarkoittaa sitä, että muuttujia ei tarvitse esitellä ennen käyttöä (vaikka tämä aiheuttaakin PHP:n virheenhallintajärjestelmässä huomautuksen (E_NOTICE), ja on hyvin epäsuositeltavaa), ja muuttuja voi vaihtaa tyyppiä kesken skriptin suorituksen.
# Muuttujatyyppiä ei tarvitse eikä saa erikseen määritellä. PHP valitsee itse muuttujatyypin, joka sopii muuttujaan sijoitettavaan arvoon. Tarvittaessa PHP automaattisesti muuttaa muuttujatyypin (esim. lisättäessä kokonaislukuun liukuluku). Tarvittaessa muuttujille voidaan kuitenkin suorittaa tyyppimuunnos, joka tekee muuttujasta valitun tyyppisen.
# Kielen perusominaisuuksiin kuuluu heterogeeninen taulukko. Tällöin taulukko voi sisältää useita erityyppisiä muuttujia alkioissaan.
 
'''Esimerkkejä muista huomioista:
<div style="width: 80%; clear: both">
<pre><nowiki>
<?php
 
$luku = "Luku on: "; // muuttuja $luku on nyt merkkijono (string)
echo $luku;
 
$luku = 256; // muuttuja $luku vaihtuu kokonaisluvuksi
echo $luku;
 
// Lopputulos olisi: "Luku on: 256"
 
// Heterogeeninen taulukko
$taulukko = array (
1, // Kokonaisluku
2.22, // Liukuluku
"1 ja 2.22 ovat taulukon alkioita", // Merkkijono
);
 
?>
</nowiki></pre>
</div>
 
== PHP:n käyttö ==
Noudettu kohteesta ”https://fi.wikibooks.org/wiki/PHP