Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Php state

frogMan [22.04.2013 20:43:40]

#

Suoritan tällä hetkellä php ohjelmoinnin jatkokurssia. Nyt pitäisi toteuttaa state mallilla jokin yksinkertainen esimerkkikoodi, enkä tiedä yhtään mistä aloittaa. Luin muutamia ohjeita verkossa, mutta ei vieläkään oikein auvennut, help!

qeijo [23.04.2013 08:25:55]

#

Moin Frille! Alla minimalistinen valokatkaisija state - esimerkki!

<?php

class Katkaisija {

    private $on, $off, $tila;

    public function __construct() {

        $this->on = new On($this);
        $this->off = new Off($this);
        $this->asetaTila($this->off); // Asetetaan oletus tila
    }

    public function asetaTila(TilaInterface $tila) {

        $this->tila = $tila;
    }

    public function on() {

        $this->tila->on();
    }

    public function off() {

        $this->tila->off();
    }

    public function haeOn() {

        return $this->on;
    }

    public function haeOff() {

        return $this->off;
    }
}

interface TilaInterface {

    public function on();
    public function off();
}

abstract class Tila implements TilaInterface {

    protected $katkaisija;

    final public function __construct(Katkaisija $katkaisija) {

        $this->katkaisija = $katkaisija;
    }

    public function on() {}
    public function off() {}
}

class On extends Tila {

    public function off() {

        print 'OFF';
        $this->katkaisija->asetaTila($this->katkaisija->haeOff());
    }
}

class Off extends Tila {

    public function on() {

        print 'ON';
        $this->katkaisija->asetaTila($this->katkaisija->haeOn());
    }
}

$katkaisija = new Katkaisija();

$katkaisija->off(); // NEIN!
$katkaisija->on();  // ON
$katkaisija->on();  // NEIN!
$katkaisija->off(); // OFF
$katkaisija->on();  // ON
$katkaisija->off(); // OFF
$katkaisija->off(); // NEIN!
$katkaisija->off(); // NEIN!
$katkaisija->on();  // ON

Vastaus

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

Tietoa sivustosta