Introduktion av MVC i PHP

Exempel

Nedan demonstreras ett exempel för att göra det lättare att förstå.
Exemplet går ut på att man har två tal som det räknas med på olika sätt. Tal1 har värde 100 och tal2 har värde 30. Genom att klicka på fyra olika länkar kan man byta operatorn mellan talen. De fyra operatorerna är addition (tal1 + tal2), subtraktion (tal1 - tal2), multiplikation (tal1 * tal2) och division (tal1 / tal2). Beroende på vilken länk man klickar på kommer operatorn och svaret att ändras och sedan presenteras.
I koden finns en mindre mängd kommentarer för att lättare förstå vad som händer.

Exemplet består av fyra filer: index.php, calModel.php, calView.php och calController.php. Notera namnen på filerna.
PHP: index.php
1:
<?php
2:
 
3:
// Inkluderar filerna med klasserna
4:
require_once('calView.php');
5:
require_once('calModel.php');
6:
require_once('calController.php');
7:
 
8:
// Skapar ett objekt av modellen
9:
$cModel = new calModel();
10:
 
11:
// Skapar ett objekt av vyn
12:
$cView = new calView($cModel);
13:
 
14:
// Skapar ett objekt av kontrollen
15:
$cController = new calController($cView, $cModel, $_GET);
16:
 
17:
?>
PHP: calModel.php
1:
<?php
2:
 
3:
// Detta är modellen som sköter alla beräkningar.
4:
class calModel
5:
{
6:
    // Tal1
7:
    private $a 100;
8:
 
9:
    // Tal2
10:
    private $b 30;
11:
 
12:
    // Resultatet av tal1 operator tal2
13:
    private $res "?";
14:
 
15:
    // Operatorn
16:
    private $op;
17:
 
18:
    // Adderar tal1 och tal2
19:
    public function add()
20:
    {
21:
        $this->res = $this->a + $this->b;
22:
    }
23:
 
24:
    // Subtraherar tal2 från tal1
25:
    public function sub()
26:
    {
27:
        $this->res = $this->a - $this->b;
28:
    }
29:
 
30:
    // Multiplicerar tal1 med tal2
31:
    public function mul()
32:
    {
33:
        $this->res = $this->a * $this->b;
34:
    }
35:
 
36:
    // Dividerar tal1 med tal2
37:
    public function div()
38:
    {
39:
        $this->res = $this->a / $this->b;
40:
    }
41:
 
42:
    // Retunerar värdet på tal1
43:
    public function getA()
44:
    {
45:
        return $this->a;
46:
    }
47:
 
48:
    // Retunerar värdet på tal2
49:
    public function getB()
50:
    {
51:
        return $this->b;
52:
    }
53:
 
54:
    // Retunerar resultatet av tal1 operator tal2
55:
    public function getRes()
56:
    {
57:
        return $this->res;
58:
    }
59:
 
60:
    // Retunerar operatorn
61:
    public function getOp()
62:
    {
63:
        return $this->op;
64:
    }
65:
 
66:
    // Sätter en operator
67:
    public function setOp($op)
68:
    {
69:
        $words = array("add", "sub", "mul", "div");
70:
        $chars = array("+", "-", "*", "/");
71:
 
72:
        $this->op = str_replace($words$chars$op);
73:
    }
74:
}
75:
 
76:
?>
PHP: calView.php
1:
<?php
2:
 
3:
// Detta är vyn (Det grafiska vi ser (html)).
4:
class calView
5:
{
6:
    // Referens till modellen
7:
    private $cModel;
8:
 
9:
    // En konstruktor som skapar ett objekt av modellen
10:
    public function __construct($cModel)
11:
    {
12:
        $this->cModel $cModel;
13:
    }
14:
 
15:
    // Skriver ut hela operationen a op b = ?. Skriver även ut länkar så att
16:
man kan välja operator.
17:
    public function display()
18:
    {
19:
        echo $this->cModel->getA()." ".$this->cModel->getOp()."
20:
".$this->cModel->getB()." = ".$this->cModel->getRes();
21:
        echo "
22:
            <ul>
23:
                <li><a href='?op=add'>Addition</a></li>
24:
                <li><a href='?op=sub'>Subtraktion</a></li>
25:
                <li><a href='?op=mul'>Multiplikation</a></li>
26:
                <li><a href='?op=div'>Division</a></li>
27:
            </ul>
28:
        ";
29:
    }
30:
}
31:
 
32:
?>
PHP: calController.php
1:
<?php
2:
 
3:
// Detta är våran kontroller.
4:
class calController
5:
{
6:
    // Referens till vyn.
7:
    private $cView;
8:
 
9:
    // Referens till modellen
10:
    private $cModel;
11:
 
12:
    // Konstruktor med vyn, modellen och värdet på $_GET som parametrar.
13:
    public function __construct($cView$cModel$get)
14:
    {
15:
        $this->cView $cView;
16:
        $this->cModel $cModel;
17:
 
18:
        // Kollar värdet på $get['op'] och väljer operator utifrån det.
19:
        if($get['op'] == 'add') {
20:
            $this->cModel->add();
21:
        } else if($get['op'] == 'sub') {
22:
            $this->cModel->sub();
23:
        } else if($get['op'] == 'mul') {
24:
            $this->cModel->mul();
25:
        } else if($get['op'] == 'div') {
26:
            $this->cModel->div();
27:
        } else {
28:
            $get['op'] = 'op';
29:
        }
30:
 
31:
        // Sätter operatorn.
32:
        $this->cModel->setOp($get['op']);
33:
 
34:
        // Uppdaterar vyn.
35:
        $this->cView->display();
36:
    }
37:
}
38:
 
39:
?>

Sida 2 av 5
[ 1 2 3 4 5 ]
Välkommen Anonymous
Logga in
Registrera
Snabblänkar
Markera alla forum som lästa
Skriptarkivet [86 av 97]
Visa nya inlägg
Visa dina inlägg
Visa obesvarade huvudinlägg
Läs vår skola
  Introduktion
  Programmera i webbmiljö
  Installationen i Windows
  Variabler och konstanter
  Vektorer
  Operatorer
  Villkorssatser
  Slingor
Statistik
Registrerade medlemmar: 19802
Inlägg totalt: 719634
Senaste medlem: markusja
Online
Besökare just nu: 46,
0 registrerade,
0 dolda och
46 gäster
Besökare som mest var 501 den 2019-05-02 15:53

Våra medlemmar
Inloggade medlemmar
Bra att veta
Förhållningsregler
Trivselregler
phpBB-FAQ
För dig som vill länka
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic