User_Mapper en User_Model

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Raoul -

- Raoul -

05/04/2012 22:34:03
Quote Anchor link
Eerst even mijn code, daarna leg ik alles uit:
User_Mapper_Model
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

class User_Mapper_Model extends Model {
    public function __construct() {
        parent::__construct();
    }


    public function find($id) {
        require 'user_model.php';
        return (new User_Model($id));        
    }
    
}


?>

User_Model
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

class User_Model extends Model {
    public $user_data;

    public function __construct($id) {
        parent::__construct();

        $this->user_data = $this->db->query("SELECT * FROM users
                                            WHERE id = "
. $this->db->quote($id) . "
                                            "
)->fetch();
    }


    public function read($row) {
        return $this->user_data[$row];
    }


    public function update($row, $value) {
        $this->db->query("UPDATE users SET
                          "
. $row . " = " . $this->db->quote($value) . "
                          WHERE id = "
. $this->db->quote($this->user_data['id']));
    }
    
}


?>

Model:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

class Model {

    public function __construct() {
        $this->db = new Database;
    }
    
}


?>

Zoals je ziet gebruik in een Mapper om een User op te halen en dan een user object te retourneren, maar dat werkt niet echt goed.
Ik gebruik 'm zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$latest_message = $user_mapper->find($latest_message['author']);
$post_starter   = $user_mapper->find($post['author']);


Maar ik krijg iedere keer de foutmelding:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Fatal error: Cannot redeclare class User_Model in /public_html/dev/models/user_model.php on line 24

Waarschijnlijk omdat ik 'm 2x gebruik. Hoe kan ik dit oplossen?

Groeten
 
PHP hulp

PHP hulp

11/01/2025 00:55:08
 

05/04/2012 22:48:49
Quote Anchor link
Quote:
Waarschijnlijk omdat ik 'm 2x gebruik. Hoe kan ik dit oplossen?

Niet 2 keer dezelfde class aanroepen :)
 
Ozzie PHP

Ozzie PHP

05/04/2012 22:52:07
Quote Anchor link
Verander in User_Mapper_Model in de functie find deze regel:

require 'user_model.php';

in dit:

require_once 'user_model.php';
 
- Raoul -

- Raoul -

05/04/2012 22:52:40
Quote Anchor link
Dank Ozzie, dat had ik over het hoofd gezien :-P
Gewijzigd op 05/04/2012 22:53:56 door - Raoul -
 
Ozzie PHP

Ozzie PHP

05/04/2012 23:02:26
Quote Anchor link
you're welcome ;)
 
- Raoul -

- Raoul -

06/04/2012 17:03:30
Quote Anchor link
Dit wil ik toch even naar boven halen. Moet zo'n mapper class static zijn?
 
Wouter J

Wouter J

06/04/2012 17:04:58
Quote Anchor link
Static klasse kunnen -nog- niet in PHP, maar je hoeft niet allemaal static functies te maken: http://www.phphulp.nl/php/forum/topic/oop-in-combinatie-met-database/81754/#580025
Gewijzigd op 06/04/2012 17:05:53 door Wouter J
 
- Raoul -

- Raoul -

06/04/2012 17:06:33
Quote Anchor link
Heb nu dit gemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    $gebruiker
= User_Mapper::find_by_id(1);

    $gebruiker->username = 'Piet';

    echo $gebruiker->username;
        
    User_Mapper::save($gebruiker);
?>

Is zoiets correct OOP?

En onder welke map horen de mappers, is dit onder de 'mappers' categorie, of 'models'?
Gewijzigd op 06/04/2012 20:07:52 door - Raoul -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.