Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP:n olio-ohjelmointi

Jaska [02.03.2010 18:25:38]

#

Antakaapa vinkkejä siitä, mistä voisi oppia nopeasti käyttämään ja tekemään olioita PHP:llä. Pitäisi tehdä hieman N-ary tree:n tyyppinen puu, jossa lasten lukumäärä voi kuitenkin vaihdella, eli puurakenne ja linkitetty lista. Oliot ovat kyllä tuttuja Javan puolelta, mutta PHP:llä ei ole tullut vastaan. Vai onkohan XML-tiedoston parsimiseen jokin helpompi tapa?

Teuro [02.03.2010 18:32:57]

#

Voitko käyttää DOM rajapintaa XML:n lukemiseen. Sehän on ainakin PHP:n versiossa 5 aika hyvällä mallilla. Itse tehtynä tuo kuvaamasi tietorakenne olisi aika lähellä XML:ä, jos lasten määrä voi vaihdella solmusta toiseen.

Jaska [02.03.2010 18:35:15]

#

Voin käyttää, mutta kun ei taidot vielä riitä. Miten tuo DOM toimii?

Teuro [02.03.2010 18:44:59]

#

<?php
/* Luodaan uusi dokumentti */
$sivu = new DOMDocument("1.0", "UTF-8");

/* Ladataan validi xml-tiedosto */
$sivu->load("polku/xml/tiedostoon.xml");

/* Haetaan kaikki linkkisolmut */
$linkit = $sivu->getElementsByTagName("a");

/* Käydään läpi jokainen haettu solmu */
for($i = 0; $i < $linkit->length; ++$i){
    /* Tulostetaan solmu, jos sen class attribuutti on 'menu' */
    if($linkit->item($i)->getAttribute("class") == "menu"){
        echo $linkit->item($i)->textContent . "<br />";
    }
}

Metabolix [02.03.2010 18:47:51]

#

Tässä on vielä hieman yleistä juttua, jota käsittääkseni kaipasit:

PHP:n oliot ovat syntaksiltaan ja toiminnaltaan erittäin lähellä Javan olioita: näkyvyydet (public jne.), extends, implements, abstract ja final sekä metodien ylikirjoitus toimivat samalla tavalla. Olioon viittaavat muuttujat ovat aina viittauksia, eli kopiointi täytyy tehdä eksplisiittisesti.

Syntaksi on toki PHP:tä, eli käytetään $-merkkejä ja function-sanoja. Pari muuta eroa Javaan: Instanssin jäseniin viitataan muodossa $olio->jasen, omiinkin viitatessa $this vaaditaan aina. Staattisiin viitataan Luokka::$jasen tai luokan sisällä self::$jasen. Lisäksi "loogisesti" parent-sanan kanssa käytetäänkin aina kaksoispisteitä, eli esim. Javasta tuttu super.funktio() onkin parent::funktio().

<?php
class Piste {
    private $i;
    public $x = 10;
    public $y = 12;
    private static $n = 0;
    public function __construct($x = 10) {
        $this->x = $x;
        $this->i = self::$n;
        self::$n += 1;
    }
    public function printtaa() {
        echo "$this->i: ($this->x, $this->y)\n";
    }
}

$p = new Piste();
$p->printtaa();
$p2 = new Piste(23);
$p2->printtaa();
$p2->y = 15;
$p2->printtaa();

Onneksi olkoon, osaat nyt varmaankin käyttää olioita PHP:llä!

Jaska [02.03.2010 18:59:20]

#

Dom vaikuttaa kätevältä ja oliot helppokäyttöisiltä. Mitenkä DOMilla voidaan katsoa, että jos mulla on vaikka päivämäärä-otsikko -pareja, niin voisin käsitellä päivämääriä erikseen ja otsikoita erikseen? Kuhunkin päivämäärään voi liittyä käsittelemässäni tapauksessa monia otsikoita tai ei välttämättä yhtään.

Teuro [02.03.2010 19:09:14]

#

Olisiko rakenne silloin tällainen?

...
<ul>
    <li>Otsikko 1
        <ul>
            <li>pvm 1</li>
            <li>pvm 2</li>
        </ul>
    </li>
    <li>Otsikko 2
        <ul>
            <li>pvm 1</li>
        </ul>
    </li>
</ul>
...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta