[check] OOP Page class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Java Developer / WebSphere / Architecture

Functieomschrijving Are you a team player that is proactive and isn’t afraid to share your opinion? Do you have experience with developing in Java and do you have experience with deploying applications in WebSphere? Then advance your career in one of the coolest and most challenging financial companies located in, The Netherlands! As a Senior Developer, you will work in a challenging environment: You will be maintaining the current Java7 / Oracle stack; You will be taking part in the architecture aspects of the new platform; You will be taking care of the offshore and onshore team contributions; You will

Bekijk vacature »

Data Engineer/ ETL Developer/ Datawarehouse

Functieomschrijving WIl je data ontsluiten, transformeren en verwerken voor een organisatie die maatschappelijk een flinke steen bijdraagt? Ben je zelfstandig, ijverig en een echte teamplayer? Dan is deze functie voor jou! Reageer snel! Ontsluiten, transformeren en verwerken van data (ETL); Analyseren van verschillende bronsystemen; Plegen van overleggen met de business en leveranciers; Beheren van het data warehouse; Doorontwikkelen van de omgeving (kennis up to date houden). Functie-eisen HBO werk en denkniveau; Minimaal 5 jaar werkervaring met dataverwerking, waarvan minimaal 2 jaar als datawarehouse developer; Kennis van verschillende Microsoft tools als SSIS, SQL Server; Ervaren scripter (Powershell, cmd); Vloeiend Nederlands in

Bekijk vacature »

Senior back end developer /Software engineer (Free

General Description: Philips Digital Cognitive Diagnostics is a new business within the Philips CTO-ventures organization. The venture is tasked with developing a new “software only” product called IntelliSpace Cognition. This new product, which is a class II medical device will help neurologists in assessing the cognitive performance of people with a neuro (degenerative) disease. The initial market for IntelliSpace Cognition is the US. A product video can be found here: https://youtu.be/U5KipcjPtz8 The venture is currently seeking for a Senior Software Engineer. The position is based in Eindhoven, the Netherlands. Requirements: • Design, test, develop, deploy, maintain and improve software assets

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

React developer / Medior / €3000-3500 / Amste

Functieomschrijving In de functie van frontend developer werk je veel met React (Native). Je werkt in multidisciplinaire Scrum teams aan projecten waar jij verantwoordelijk bent voor de frontend. Enig gevoel voor design is daarin belangrijk, je hoeft het zelf niet te kunnen maar je moet design wel belangrijk vinden. Ze zoeken iemand die al 3 jaar ervaring heeft op de frontend, ervaring met React (Native) is een dikke pré. Heb jij geen ervaring met React maar wel ervaring met Angular of Vue dan ben je hier ook welkom! Functie-eisen - Minimaal HBO werk - en denkniveau; - Minimaal 4 jaar

Bekijk vacature »

Senior Mobile Developer vacature

Senior Mobile Developer Op bijna elke mobiele telefoon in Nederland is wel een app te vinden die door Sogeti is ontwikkeld of waar Sogeti aan mee heeft gewerkt. Wil jij meehelpen met het ontwikkelen van mobiele applicaties voor de top van het Nederlandse bedrijfsleven? Als Senior Mobile Developer ben jij verantwoordelijk voor het implementeren en testen van nieuwe features. Je bent medeverantwoordelijk voor de codebase en moet deze code dus ook goed onderhouden. Doordat je thuis bent in het mobiele landschap kun je gemakkelijk sparren met andere ontwikkelaars, designers, analisten en technische leads om zo de producten waar aan je

Bekijk vacature »

Senior Mobile Developer vacature

Senior Mobile Developer Op bijna elke mobiele telefoon in Nederland is wel een app te vinden die door Sogeti is ontwikkeld of waar Sogeti aan mee heeft gewerkt. Wil jij meehelpen met het ontwikkelen van mobiele applicaties voor de top van het Nederlandse bedrijfsleven? Als Senior Mobile Developer ben jij verantwoordelijk voor het implementeren en testen van nieuwe features. Je bent medeverantwoordelijk voor de codebase en moet deze code dus ook goed onderhouden. Doordat je thuis bent in het mobiele landschap kun je gemakkelijk sparren met andere ontwikkelaars, designers, analisten en technische leads om zo de producten waar aan je

Bekijk vacature »

.NET Developer Medicatie / Apotheek

Jij krijgt een kick van het ontwikkelen van complexe software. Voor onze vestiging in Heerenveen zoeken wij een .NET Developer Medicatie / Apotheek die graag met de laatste Microsoft-tools en -technieken wil werken. Interessant? Lees snel verder! Jouw baan Je bent verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van de module Medicatie / Logistiek & Apotheek. Je gaat nauw samen werken met zowel de interne als externe klant om nieuwe functionaliteiten te ontwikkelen om onze klanten te ondersteunen in hun werkproces. Het gaat om complexe ICT-producten die feilloos moeten functioneren binnen de complexe omgeving van een zorgorganisatie. ChipSoft maakt

Bekijk vacature »

.Net Developer - B2B & B2C klantportalen, were

Al meer dan 25 jaar bouwt dit hecht en informeel team software developers in Rotterdam complexe bedrijfskritische (web & mobile) applicaties voor het MBK en multinationals, zowel in het binnen- als buitenland. Ze bouwen uiteenlopende applicaties voor uiteenlopende klanten. Om maar wat voorbeelden van organisaties en software oplossingen te noemen: Een uitgebreid ERP en projectmanagement systeem, waardoor een bouwbedrijf haar processen wereldwijd just-in-time kan inrichten. Een klantportaal voor een verzekeringsmaatschappij, waardoor 2+ miljoen klanten gebruiksvriendelijk hun zaken regelen en inzien. Een patiënten portaal voor de registratie, bijhouden van het patenten dossier, de planning en facturatie van de zorg zodat de

Bekijk vacature »

Team Lead PHP

As Tech Lead, you make our customers smile by providing great software and building an effective team. How do I become a Team Lead PHP at Coolblue? As a Team Lead PHP you build and lead a team that excels in providing high-quality and cost-efficient software. You support team members in defining their goals and with the approach to achieve them. Would you like to become a Team Lead PHP at Coolblue? Else de Boer explains how to do that. You enjoy doing this Building and leading a team that excels in providing high quality and cost effective software. Support

Bekijk vacature »

.NET C# ontwikkelaar gezocht (C# Winforms, Xamarin

.NET C# ontwikkelaar bij een slagvaardig en hard groeiend bedrijf met korte lijnen? In een omgeving waar je onder andere direct samen met de oprichter werkt aan het verder ontwikkelen van een vernieuwend product? Dan is deze vacature zeker iets voor jou. Voor een bedrijf in Rotterdam zijn we momenteel op zoek naar een .NET C# ontwikkelaar. Het gaat om klein bedrijf dat op een punt is aanbeland waar de vraag naar hun software flink aan het toenemen is. Hierdoor zijn ze op zoek naar meerdere .NET ontwikkelaars die samen met de oprichter en nog verschillende andere collega’s hun software

Bekijk vacature »

Senior Mobile Developer vacature

Senior Mobile Developer Op bijna elke mobiele telefoon in Nederland is wel een app te vinden die door Sogeti is ontwikkeld of waar Sogeti aan mee heeft gewerkt. Wil jij meehelpen met het ontwikkelen van mobiele applicaties voor de top van het Nederlandse bedrijfsleven? Als Senior Mobile Developer ben jij verantwoordelijk voor het implementeren en testen van nieuwe features. Je bent medeverantwoordelijk voor de codebase en moet deze code dus ook goed onderhouden. Doordat je thuis bent in het mobiele landschap kun je gemakkelijk sparren met andere ontwikkelaars, designers, analisten en technische leads om zo de producten waar aan je

Bekijk vacature »

Medior Mircosoft BI Developer (60% intern, 40% bij

Functieomschrijving Ze zijn op zoek naar een Medior BI Developer voor een (deels) interne functie. Je werkt mee aan één van de BI applicaties die is gebouwd. Je onderzoekt trends in de markt en speelt daar efficiënt op in. Je helpt klanten door data te analyseren wat inzicht biedt in de KPI’s en of alles volgens plan verloopt. Je bouwt mee aan het datawarehouse en ontwikkelt rapportages en kubussen. Dit hoef je uiteraard niet alleen te doen, je werkt samen met andere BI developers en de productowner. Hij weet álles over de applicatie. Er zit ook een component testing in

Bekijk vacature »

Starter Beta WO afgestudeerd traineeship Developer

Functieomschrijving Tijdens het traineeship krijg je de keuze om jezelf te ontwikkelen als developer. Welke richting (Front-end/Backend/Fullstack developer) dat mag jij zelf kiezen. Samen met met je collega's ga je kijken welke route het beste bij jou past en daar wordt een persoonlijk groeipad voor ontwikkeld. Ze zoeken wel mensen die (enige) ervaring hebben binnen development dus passie voor IT en programmeren is hier wel een must. Functie-eisen - Je hebt een afgeronde master of bachelor opleiding met béta component; - Je hebt kennis van een of meerdere programmeertalen; - Je bent creatief en denkt out-of-the-box; - Je bent gedreven

Bekijk vacature »

Medior Java-developer

Functie­omschrijving Introductie Als KVK zijn we de leukste startup van de Nederland. KVK is sinds enige tijd bezig met een (digitale) transitie. Inmiddels werken we met 500 digital professionals aan de digitalisering van onze processen. Hierbij gebruiken we de nieuwste technieken en methodes. In het jaar 2020 gaat KVK nog eens 100 Digital specialisten aannemen om onze hoge ambities te verwezenlijken. Met elkaar bedenken we nieuwe tools die gebruikmaken van gegevens vanuit het Handelsregister en die worden verrijkt met andere data. Zo brengen we real time en fact-based business opportunities in kaart. Daar kun jij bij zijn! Jouw kracht Als

Bekijk vacature »
Boris Mattijssen

Boris Mattijssen

31/12/2009 13:11:00
Quote Anchor link
Hallo allemaal,

Na het lezen van de tut van Blache wilde ik een kijken of mijn eigen OOP kunsten een beetje in orde zijn.

Nu heb ik deze 2 classes:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php

/**
* CLASS
*/


class Page {
    private $_id;
    private $_title;
    private $_content;
    private $_parentId;
    private $_isHome;
    
    public function __construct() {
        $this->_id         = 0;
        $this->_title         = '';
        $this->_content     = '';
        $this->_parentId     = null;
        $this->_isHome         = 0;
    }

    
    public function setId($id) {
        if(ctype_digit($id)) {
            $this->_id = $id;
        }
else {
            throw new Exception('Id is not a digit.');
        }
    }

    
    public function setTitle($title) {
        if(ctype_alnum($title)) {
            $this->_title = $title;
        }
else {
            throw new Exception('Title is not alphanumaric.');
        }
    }

    
    public function setContent($content) {
        $this->_content = $content;
    }

    
    public function setParentId($parentId) {
        if(ctype_digit($parentId) || $parentId === null) {
            $this->_parentId = $parentId;
        }
else {
            throw new Exception('ParentId is neither a digit nor NULL.');
        }
    }

    
    public function setIsHome($isHome) {
        if($isHome == 0 || $isHome == 1) {
            $this->_isHome = $isHome;
        }
else {
            throw new Exception('IsHome is not 0 or 1.');
        }
    }

    
    public function getId() {
        return $this->_id;
    }

    
    public function getTitle() {
        return $this->_title;
    }

    
    public function getContent() {
        return $this->_content;
    }

    
    public function getParentId() {
        return $this->_parentId;
    }

    
    public function getIsHome() {
        return $this->_isHome;
    }
}


class Page_Controller {
    private function $_page;
    
    public function __construct(Page $page) {
        $this->_page = $page;
    }

    
    public function new() {
        mysql_query("
        INSERT INTO
            pages
            (
                title,
                content,
                parent_id,
                is_home
            )
        VALUES
            (
                '"
. $this->_page->getTitle() . "',
                '"
. mysql_real_escape_string($this->_page->getContent()) . "',
                '"
. $this->_page->getParentId() . "',
                '"
. $this->_page->getIsHome() . "'
            )
        "
);
    }

    
    public function edit() {
        mysql_query("
        UPDATE
            pages
        SET
            title        = '"
. $this->_page->getTitle() . "',
            content        = '"
. mysql_real_escape_string($this->_page->getContent()) . "',
            parent_id    = '"
. $this->_page->getParentId() . "',
            is_home        = '"
. $this->_page->getIsHome() . "'
        WHERE
            id         = '"
. $this->_page->getId() . "'
        "
);
    }

    
    public function delete() {
        mysql_query("DELETE FROM pages WHERE id = '" . $this->_page->getId() . "'");
    }

    
    public function getData() {
        $result = mysql_query("SELECT * FROM pages WHERE id = '" . $this->_page->getId() . "'");
        return mysql_fetch_assoc($result);
    }
}


/**
* USAGE
*/


try {
    /* create a page */
    $page = new Page();
    $page->setTitle('Sub pagina');
    $page->setContent('Lorum ipsum..');
    $page->setParentId(1);
    $page->setIsHome(0);
    
    $pageController = new Page_Controller($page);
    $pageController->new();
    
    /* edit a page */
    $page = new Page();
    $page->setId(1);
    $page->setTitle('Hoofd pagina');
    $page->setContent('Lipsum lorum pipsum..');
    $page->setParentId(null);
    $page->setIsHome(1);
    
    $pageController = new Page_Controller($page);
    $pageController->edit();
    
    /* delete a page */
    $page = new Page();
    $page->setId(1);
    
    $pageController = new Page_Controller($page);
    $pageController->delete();
    
    /* get data of a page */
    $page = new Page();
    $page->setId(1);
    
    $pageController = new Page_Controller($page);
    print_r($pageController->getData());
    
}
catch (Exception $e) {
    echo 'Caught exception: '. $e->getMessage() ."\n";
}


?>


Ik heb er voor gekozen om verschillende "set" functies te maken, en niet alles via de constructor mee te geven.
Dit heb ik gedaan omdat je bij het verwijderen van een pagina alleen het id nodig hebt, bij het bewerken echter ook de titel, inhoud etc..

Ik hoor graag jullie mening.

Groetjes,
Boris

ps: ik zou idd een PDO achtig iets moeten gebruiken voor m'n database werk, maar dit heb ik net ff snel in elkaar geflanst had geen zin om dat uit te gaan zoeken. Misschien dat ik dat na jullie reviews nog ff doe.. ;)
 
PHP hulp

PHP hulp

12/08/2020 10:44:19
 
Joren de Wit

Joren de Wit

31/12/2009 13:22:00
Quote Anchor link
In de Page_Controller:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
private function $_page;
?>

Dit klopt niet, je moet 'function' daar even weghalen.

Verder zijn die mysql_query()'s daar niet erg gelukkig. In principe zou je nu een query uit proberen te voeren zonder dat er een verbinding met de database opgezet is. Dat zul jij dus altijd nog moeten doen voordat je deze class gebruikt en dat is niet gewenst. (Maar dat zei je zelf ook al :))

Quote:
Dit heb ik gedaan omdat je bij het verwijderen van een pagina alleen het id nodig hebt, bij het bewerken echter ook de titel, inhoud etc..
Bij het verwijderen heb je dan ook niet per se een Page object nodig. Je zou ervoor kunnen kiezen om je Page_Controller te voorzien van een method deletePageById($pageId). In de constructor van je Page_Controller moet je dan ook geen Page object vragen, je kunt het Page object ook meegeven op het moment dat je de actie uitvoert. Wat je wél aan die constructor mee zou moeten geven, is een Database object dat de communicatie met de database verzorgt.
 
Boris Mattijssen

Boris Mattijssen

31/12/2009 14:57:00
Quote Anchor link
Blanche,
Dat was idd een typo, en ik heb er nu ook een database klasse bij gebouwd (of eigenlijk gekopieerd van php.net)

Resultaat:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<?php

/**
* CLASS
*/


class DB {
    protected static $_host     = 'localhost';
    protected static $_user     = 'root';
    protected static $_pass     = '***';
    protected static $_dbname    = 'site_db';
    
    private static $objInstance;

    private function __construct() {}
    private function __clone() {}

    public static function getInstance(  ) {
        if(!self::$objInstance){
            self::$objInstance = new PDO('mysql:host=' . self::$_host . ';dbname=' . self::$_dbname, self::$_user, self::$_pass);
            self::$objInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }

        return self::$objInstance;
    }


    final public static function __callStatic( $chrMethod, $arrArguments ) {
        $objInstance = self::getInstance();
        return call_user_func_array(array($objInstance, $chrMethod), $arrArguments);
    }
}


class Page {
    private $_id;
    private $_title;
    private $_content;
    private $_parentId;
    private $_isHome;
    
    public function __construct() {
        $this->_id         = 0;
        $this->_title         = '';
        $this->_content     = '';
        $this->_parentId     = null;
        $this->_isHome         = 0;
    }

    
    public function setId($id) {
        if(ctype_digit($id)) {
            $this->_id = $id;
        }
else {
            throw new Exception('Id is not a digit.');
        }
    }

    
    public function setTitle($title) {
        if(ctype_alnum($title)) {
            $this->_title = $title;
        }
else {
            throw new Exception('Title is not alphanumaric.');
        }
    }

    
    public function setContent($content) {
        $this->_content = $content;
    }

    
    public function setParentId($parentId) {
        if(ctype_digit($parentId) || $parentId === null) {
            $this->_parentId = $parentId;
        }
else {
            throw new Exception('ParentId is neither a digit nor NULL.');
        }
    }

    
    public function setIsHome($isHome) {
        if($isHome == 0 || $isHome == 1) {
            $this->_isHome = $isHome;
        }
else {
            throw new Exception('IsHome is not 0 or 1.');
        }
    }

    
    public function getId() {
        return $this->_id;
    }

    
    public function getTitle() {
        return $this->_title;
    }

    
    public function getContent() {
        return $this->_content;
    }

    
    public function getParentId() {
        return $this->_parentId;
    }

    
    public function getIsHome() {
        return $this->_isHome;
    }
}


class Page_Controller {
    private $_page;
    
    public function __construct(Page $page) {
        $this->_page = $page;
        $this->_db   = new Database();
    }

    
    public function new() {
        $query = "
        INSERT INTO
            pages
            (
                title,
                content,
                parent_id,
                is_home
            )
        VALUES
            (
                :title,
                :content,
                :parentId,
                :isHome
            )
        "
;
        $stmt = DB::prepare($query);
        $stmt->bindParam(':title', $this->_page->getTitle(), PDO::PARAM_STR);
        $stmt->bindParam(':content', $this->_page->getContent(), PDO::PARAM_STR);
        $stmt->bindParam(':parentId', $this->_page->getParentId(), PDO::PARAM_STR);
        $stmt->bindParam(':isHome', $this->_page->getIsHome(), PDO::PARAM_STR);
        $stmt->execute();
    }

    
    public function edit() {
        $query = "
        UPDATE
            pages
        SET
            title        = :title
            content        = :content
            parent_id    = :parentId
            is_home        = :isHome
        WHERE
            id         = :id
        "
;
        $stmt = DB::prepare($query);
        $stmt->bindParam(':title', $this->_page->getTitle(), PDO::PARAM_STR);
        $stmt->bindParam(':content', $this->_page->getContent(), PDO::PARAM_STR);
        $stmt->bindParam(':parentId', $this->_page->getParentId(), PDO::PARAM_STR);
        $stmt->bindParam(':isHome', $this->_page->getIsHome(), PDO::PARAM_STR);
        $stmt->bindParam(':id', $this->_page->getId(), PDO::PARAM_STR);
        $stmt->execute();
    }

    
    public function delete() {
        DB::exec("DELETE FROM pages WHERE id = '" . $this->_page->getId() . "'");
    }

    
    public function getData() {
        return DB:query("SELECT * FROM pages WHERE id = '" . $this->_page->getId() . "'");
    }
}


/**
* USAGE
*/


try {
    /* create a page */
    $page = new Page();
    $page->setTitle('Sub pagina');
    $page->setContent('Lorum ipsum..');
    $page->setParentId(1);
    $page->setIsHome(0);
    
    $pageController = new Page_Controller($page);
    $pageController->new();
    
    /* edit a page */
    $page = new Page();
    $page->setId(1);
    $page->setTitle('Hoofd pagina');
    $page->setContent('Lipsum lorum pipsum..');
    $page->setParentId(null);
    $page->setIsHome(1);
    
    $pageController = new Page_Controller($page);
    $pageController->edit();
    
    /* delete a page */
    $page = new Page();
    $page->setId(1);
    
    $pageController = new Page_Controller($page);
    $pageController->delete();
    
    /* get data of a page */
    $page = new Page();
    $page->setId(1);
    
    $pageController = new Page_Controller($page);
    print_r($pageController->getData());
    
}
catch (Exception $e) {
    echo 'Caught exception: '. $e->getMessage() ."\n";
}


?>

En zou jij misschien een voorbeeld (in de vorm van code (A)) kunnen geven van hoe jij dat ziet met dat deletePageById() verhaal icm de Page klasse?

Groet en bij voorbaat dank,
Boris

edit: prepared statements toegevoegd
Gewijzigd op 01/01/1970 01:00:00 door Boris Mattijssen
 
Jelmer -

Jelmer -

31/12/2009 15:29:00
Quote Anchor link
Waarom is de page_controller gebonden aan één enkele page?

Waarom gebruik je DB::prepare? Wat is dan het verschil met mysql_query, en welk punt van Blanche mis je hier nu? edit: ooh, ik zie dat Blanche een ander punt maakt. In ieder geval: het is vaak onhandig om één databaseverbinding in je hele applicatie te hebben. Soms is het zo dat je gebruikers uit een andere database wilt hebben dan pagina's, en dan heb je met zo'n static DB::prepare() aanroep een probleem. Andere situaties zouden kunnen zijn dat je naar een andere db schrijft dan dat je leest, of dat je een verbinding in een transactie hebt zitten en toch andere dingen direct wilt opslaan, en dus een tweede verbinding nodig hebt. En natuurlijk het principe. Een static aanroep is niets anders dan een functie-aanroep, en is niet een goed voorbeeld van Object Georiënteerd programmeren.

Ik zou het meer zoeken in de richting van
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
27
28
29
<?php
class Page_Controller
{
    protected $db;
    
    public function __construct(PDO $pdo)
    {

        $this->db = $pdo;
    }

    
    public function insert(Page $page)
    {

        $stmt = $this->db->prepare("UPDATE pages ....");
    }

    
    public function delete(Page $page)
    {

        $stmt = $this->db->prepare("UPDATE pages ....");
    }
}


$controller = new Page_Controller(new PDO('...'));

$home = new Page();
$controller->insert($home);

$about = new Page();
$controller->insert($about);
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Boris Mattijssen

Boris Mattijssen

31/12/2009 16:53:00
Quote Anchor link
Beste Jelmer,

Bedankt voor je reactie!
Inderdaad een goeie opmerking over die Database en Page!
Heb het aangepast.

Code staat nu hier:
http://www.codedump.be/code/482/
Werd een beetje te lang voor op het forum vond ik..

Ik heb nu een klasse Database die PDO extend, ik weet dat dit niet helemaal juist is, maar het biedt wel vele mogelijkheden. (bijvoorbeeld de functies insert, update etc..)

Groetjes,
Boris
 
Jelmer -

Jelmer -

31/12/2009 17:13:00
Quote Anchor link
PDO extenden is prima hoor :)

Volgens mij is je code nu prima. Niets meer op aan te merken :D

(werkt dat trouwens? new als functienaam? Volgens mij krijg je dan iets met unexpected keyword parse error)
 
Boris Mattijssen

Boris Mattijssen

31/12/2009 17:34:00
Quote Anchor link
Mooi ! :D

Of het werkt weet ik niet, heb nog helemaal niks ervan getest ;)
Was gewoon om ff te kijken hoe en wat ;)

Nog ff een vraagje, gebruiken jullie vaak "get" methods bijv:
$page->getId();
of doe je gewoon:
$page->id;

Groet,
 
Jelmer -

Jelmer -

31/12/2009 22:00:00
Quote Anchor link
Omdat ik het toch wel erg handig vind om functies te hebben bij het uitlezen van variabelen gebruik ik wel getters, maar omdat ze zo gewoon zijn maak ik ze niet gebiedende-wijs. Dus $page->id().

De logica erachter is alles wat gebiedende wijs is past $page aan, alles wat meer alleen een naam is, of als een vraag gelezen kan worden, verandert niets aan m'n $page object. Bijvoorbeeld if($page->id() == 24) en if($page->isHidden()) is duidelijk read-only. $page->makeDefault(), $page->setId(), $page->validate() zijn methods die $page aan kunnen passen. ($page->isValid() weer niet, en zo is er voor iedere gebiedende wijs ook wel een vragende vorm te verzinnen)
 



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.