Advanced Kittenry - Tietokantasovellusohjeet

Lyhyt PHP-opas Java-koodarille

PHP on enimmäkseen Javan kaltainen syntaksiltaan, mutta muutamia tärkeitä eroja on etenkin muuttujien ja oliosyntaksin kannalta.

Tärkein ero on varmaankin se, että muuttujia ei tarvitse esitellä, vaan muuttujat luodaan ajonaikaisesti samalla, kun niihin sijoitetaan jotakin.

$kissanVari = "keltainen";

Suurin ongelma tässä on väärin kirjoitetut muuttujanimet, jotka tuottavat virheen vasta ajonaikaisesti:

if ($kissaVari == "punainen") {
  //Koodia, jota ei koskaan ajeta
}

PHP:n tapa toimia tälläisten virheiden kanssa on olettaa muuttujan sisältö null:iksi ja jatkaa koodin suorittamista. Virhe selviää vain katsomalla virhelokeja, joihin ilmestyy seuraavantapainen virhe:

PHP Notice:  Undefined variable: kissaVari in tiedosto.php on line 1

Kahden merkkijonon yhteen liittäminen

Huomioinarvoista on kahden merkkijonon konkatenoinnin hoitaminen eri operaattorilla:

Java

String totuus = "Hauki on "+"kala";

PHP

$totuus = "Hauki on "."kala";

Olioiden ja luokkien käsittely

PHP:n oliosyntaksi on valitettavasti sekavampi kuin Javan käyttämä. Metodien kutsumiseen käytetään syntaksia $olio->metodi();, olion atribuutteja käytetään samaan tapaan $olio->attribuutti.

Sensijaan jos metodi, attribuutti, tai vakio on staattinen käytetään kahta kaksoispistettä ja atribuutin tapauksessa vielä dollaria.

Alla tiivistelmä PHP:n ja Javan tavoista käsitellä olioita ja luokkia.

Ominaisuus Java-toteutus PHP-toteutus
Instanssimetodi olio.metodi() $olio->metodi()
Instanssin attribuutti olio.attribuutti $olio->attribuutti
Staattinen metodi LuokanNimi.staattinenMetodi() LuokanNimi::staattinenMetodi()
Staattinen attribuutti LuokanNimi.attribuutti LuokanNimi::$attribuutti
Staattinen vakio LuokanNimi.VAKION_NIMI LuokanNimi::VAKION_NIMI

Konstruktorit, metodit ja funktiot

Dynaamisen tyypityksen vuoksi myöskään metodeilla ei ole tyyppejä. Niiden tilalla käytetään function-sanaa. Konstruktorit määritellään erityisellä __construct-nimisellä funktiolla:

<?php
  class Kala {
    private $nimi;

    public function __construct($nimi) {
      $this->nimi = $nimi;
    }

    public function getNimi() {
      return $this->nimi;
    }
  }
?>

Myöskin luokattomia funktioita on mahdollista tehdä:

<?php
  function pertinLempijalkiruoka() {
    return "Vaniljavanukas";
  }

Koodin näkyvyys

PHP:ssä kaikki luokat ovat samalla näkyvyydellä, joten niihin ei tarvitse laittaa etuliitettä public.

Suoraa vastinetta import-lauseelle ei ole. Sen sijaan PHP:ssä käytetään includeja require -funktioita muissa tiedostoissa olevan koodin ajamiseen. Tällä tavalla myös näissä tiedostoissa olevat luokat saa käyttöönsä. Funktioista on olemassa myös once-päätteiset versiot, jotka ajavat tiedoston vain jos sitä ei ole aiemmin ajettu.

Jokuluokka.php

<?php
  class JokuLuokka {
    const TARKOITUS = 42;
  }
?>

jokukoodi.php

<?php
  require_once 'Jokuluokka.php';

  echo "Vastaus elämään, maailmankaikkeuteen ja kaikkeen muuhun sellaiseen on ".JokuLuokka::TARKOITUS;

?>

Array, PHP:n lista- ja assosiaatiotaulutietorakenne

PHP:ssä listojen ja erilaisten assosiaatiotaulujen virkaa hoitaa yleiskäyttöinen array-tietotyyppi. Arraytä käytetään hieman kuin javan taulukoita, mutta avaimena voi käyttää sekä kokonaislukuja, että merkkijonoja. Yleensä erityyppisiä avaimia ei kuitenkaan kannata sekoittaa.

Tyhjä array luodaan kielen sisäisellä array-konstruktiolla:

  $a = array();
  $a[0] = "arvo";
  $a[1] = "toinen arvo";

Taulukkojen sisällön voi myös alustaa samalla kun ne luo. Oletuksena indeksointi alkaa nollasta.

  $m = array(1,2,3,4);
  $m[0] == 1; //tosi

Numeroindeksoidun taulukon perään voi myös lisätä arvoja jättämällä sijoittaessa avaimen pois.

  $m[] = 5; //Sama kuin sanoisi: $m[4] = 5;

Käytettäessä array-tietotyyppiä assosiaatiotauluna (vrt. Javan Map-tietotyyppi) käytetään merkkijonoavaimia. Avaimet voi määrittää myös array-kutsun sisällä käyttäen =>-operaattoria:

  $kissa = array("nimi" => "Kasper", "rotu" => "Siamilainen");
  echo $kissa["nimi"]; //Tulostaa nimen Kasper.