OOP User classe

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Teamlead PHP Developer

Functieomschrijving Voor een gewaardeerde werkgever in de buurt van Middelburg zijn wij op zoek naar een gemotiveerde teamlead PHP developer met affiniteit met Symfony/Laravel. Een enthousiast persoon die het ontwikkelteam komt versterken met het aanpakken van uitdagende projecten. Ben jij op zoek naar een uitdaging waar je de tijd en ruimte krijgt jezelf te ontwikkelen en je eigen IT-team aan te sturen? Lees dan snel verder! Die ga je doen: Bijdragen aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de PHP based applicaties; Ontwikkeling en beheer van de serviceportal in Symfony en de webshops in de tweede versie van

Bekijk vacature »

Software Developer PHP JavaScript Python HBO SQL

Samengevat: Wij zijn een softwarebedrijf voor Autodealers. Ben jij een Medior of Senior Software Developer? Heb je ervaring met PHP, JavaScript of Python? Vaste baan: Java.Developer Software HBO €3.000 - €5.200 Bij ons op de werkvloer is er een positieve en informele sfeer. Naast een goede begeleiding en een enthousiaste klantenkring biedt deze werkgever een prettige omgeving met zeer afwisselende werkzaamheden. Houd jij van aanpakken en denk je dat je deze uitdaging aankunt? Dan zoeken wij jou! Zij werken voor grote klanten. Zij doen omvangrijke projecten die we bij deze werkgever op kantoor realiseren (geen detachering). Zij werken met state-of-the-art

Bekijk vacature »

C#.NET/Unity Developer

Functieomschrijving Voor een gewaardeerde werkgever in de omgeving van Breda zijn wij op zoek naar een software ontwikkelaar. Dit bedrijf houdt zich bezig met de ontwikkeling van WMS Software (C#/Unity & SQL). Past dit bij jou? Lees snel verder! Jouw werkzaamheden zullen er als volgt uitzien: Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Samen met 6 applicatieontwikkelaars hebben jullie de verantwoordelijkheid voor de uitbreiding en ontwikkeling van de webapplicaties; Het uitvoeren van updates/aanpassingen aan de huidig draaiende applicaties; Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software. Bedrijfsprofiel Wie

Bekijk vacature »

Back-End Developer in Laravel / PHP

Functie omschrijving Wij zijn op zoek naar een Medior PHP Laravel Developer voor een gaaf bedrijf in de omgeving van Amsterdam! Voor een enthousiast team die zich graag bezig houdt met softwareontwikkeling zijn wij op zoek naar versterking. Je werkt in een klein ontwikkelteam en bent zeer betrokken bij alle aspecten van de softwareoplossingen. Van het ontwerpen tot de oplevering. Binnen deze functie ga je aan de slag met het aanpassen, verbeteren en vernieuwen van de logistieke oplossingen. Je krijgt veel te maken met koppelingen naar systemen en de verzoeken van de klant. Je komt terecht in een team, waarbij

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

Developer Full Stack

Functie omschrijving Developer gezocht! Ben jij een enthousiaste developer die graag wil bijdragen aan ontwikkelingen binnen een mooie organisatie? Solliciteer dan snel. Wij zijn op zoek naar een Full Stack Developer uit de regio Nijkerk die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van een SaaS applicatie. Je moet beschikken over beheersing van zowel de Nederlandse als Engelse taal aangezien je samen met de klant gaat werken. Bedrijfsprofiel Je komt te werken binnen een echt familiebedrijf dat al sinds 1925 actief is binnen de FMCG branche. Het bedrijf heeft 40 medewerkers en er heerst een platte communicatiestructuur waarbij

Bekijk vacature »

Software Developer Mendix / Maatschappelijk Betrok

Dit ga je doen Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Werken met Scrum methodiek; Ontwikkelen van vooruitstrevende oplossingen; Meedenken over nieuwe applicaties en ontwikkelingen; On the job eigen maken van de Mendix omgeving. Hier ga je werken Deze dynamische en snelgroeiende organisatie begeeft zich in de recyclingbranche. Zij nemen op duurzame en efficiënte manier de recycling op zich. Vanwege hun snelle groei zijn zij op zoek naar een young professional die zich graag wilt ontwikkelen als Mendix Developer. Je komt te werken binnen een IT team van +/- 15 medewerkers. Het huidige ‘vaste’

Bekijk vacature »

Cobol Developer

Dit ga je doen Als Cobol Ontwikkelaar zal je gaan meebouwen aan een onderdeel van het backend systeem waarbij je het functionele ontwerp vertaald naar een technische oplossing die geïntegreerd kan worden in de huidige omgeving. Je zorgt ervoor dat de bedrijfsprocessen op een efficiënte manier worden uitgevoerd en werkt proactief aan het verbeteren hiervan. Samen met jouw collega’s reviewen jullie elkaars code en test je je eigen code. Je werkt nauw samen met andere ontwikkelaars, testers en functioneel ontwerpers. Taken pakket: Beheren en doorontwikkelen van de bestaande omgeving; Vertalen van een functionele vragen naar een technische oplossing; Doorvoeren van

Bekijk vacature »

Software Developer

Longship.io gaat de wereld veroveren met baanbrekende software en legendarische... pizza-avonden! Lees hier de vacature van Software Developer! Bij Longship werken we met een team van 5 mensen aan software voor laadpaal operators. Longship is ontstaan in 2020 met als doel om de elektrische mobiliteitstransitie aan te jagen. We zijn nu al een wereldwijde speler doordat we continu voorop lopen in innovatie. Ons platform helpt het versneld elektrificeren van wagenparken, internationaal! Wij zijn een startup met grote ambities die we willen bereiken met een relatief klein en efficiënt team. Je krijg de kans om ontzettend veel te leren van ervaren

Bekijk vacature »

.NET Developer

Functie omschrijving Ervaren .NET Developer gezocht! Wij zoeken een ervaren .NET developer die aan de slag gaat voor een softwarebedrijf in de regio Rhenen. In deze rol ben jij zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Daarnaast houdt jij je bezig met de nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en product specialisten om mooie producten te creëren. Bedrijfsprofiel Waar kom je te werken? Je komt te werken voor snelgroeiende softwareleverancier en allround dienstverlener. Klanten van deze

Bekijk vacature »

C# ontwikkelaar

Functie omschrijving Werk jij graag met C# en het .NET framework in een leuk familiebedrijf? Lees dan snel verder! Jouw takenpakket hierbij is: Je gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Je gaat werken in een Microsoft omgeving (ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Daarnaast optimaliseer je de bestaande software. Bedrijfsprofiel Deze organisatie is gevestigd in de omgeving van Best en is een echt familiebedrijf. Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met

Bekijk vacature »

SQL Developer

Functie omschrijving Altijd al willen werken bij een snelgroeiend bedrijf, actief in de logistieke sector? Dit is je kans! Ik ben op zoek naar een ervaren SQL Developer in de omgeving Tilburg. Dit bedrijf is gespecialiseerd in in de ontwikkeling van software en maatwerk oplossingen voor het automatiseren van logistieke processen. Klanten zijn o.a. BOL en andere grote distributiecentrums. Jouw taken worden vooral: Verantwoordelijk voor ontwikkelen van stored procedures, voor snelle afhandeling van data; Optimalisatie van de SQL query's en T-SQL query's; Jij gaat je bezig houden met ontwerpen, ontwikkelen en optimaliseren van de MS SQL Databases; In deze functie

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor een informele club in omgeving Delft zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Als ontwikkelaar kom je terecht op een afdeling van 6 medewerkers. Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Er wordt voornamelijk gewerkt met PHP, Java en

Bekijk vacature »

SQL Developer

Functie omschrijving We are looking for a dutch native speaker Jij gaat in deze functie aan de slag met uitdagende projecten en het creëren van maatwerk software, vooral middels SQL. Iedere klant/project is weer anders, maar dat maakt dit bedrijf en de functie erg uniek & uitdagend. Verder heb je de volgende taken: Ontwikkelen en ontwerpen van SQL databases. T-SQL wordt hierbij gebruikt als programmeer laag; Optimalisatie van query's, voor een verbeterde efficiency; Begeleiden van junior developers, mits je dit leuk vindt; Heb je meer interesse in een rol als consultant, dan is dit ook mogelijk. Je heb hier meer

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Pagina: « vorige 1 2 3 4 volgende »

Niels K

Niels K

28/12/2010 15:09:51
Quote Anchor link
Wat noem jij herkennen?

Het volgende voorbeeld werkt dus gewoon als jij dit herkennen noemt:

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
<?php

class TestController extends BaseController
{
    public function preDispatch( )
    {

        // Shizzle
        parent::preDispatch( );
    }

    
    public function testAction( )
    {

        // Model aanroepen
        $tbl_test = new Table_Test( );
        
        // Het kan via methoden
        $this->view->test = $tbl_test->getTest( );
        
        // OF
        $this->view->test = $tbl_test->select( )->where( 'test = ?', 'test' )->order('RAND');
    }
}
 
PHP hulp

PHP hulp

20/05/2024 12:53:30
 
Ozzie PHP

Ozzie PHP

28/12/2010 15:15:09
Quote Anchor link
Ah oke, ja ik doe het zelf op een wat andere manier... maar dat model path moet je dan wel bij je include paden instellen neem ik aan?
 
Niels K

Niels K

28/12/2010 15:18:09
Quote Anchor link
Hoe doe jij het precies dan? Ja inderdaad moet dat in je include path staan, dan moet in de bootstrap regelen of in je config.
 
Ozzie PHP

Ozzie PHP

28/12/2010 15:24:20
Quote Anchor link
Ik gebruik die table niet (models op dit moment ook niet wegens tijdgebrek :))
 
Niels K

Niels K

28/12/2010 15:26:10
Quote Anchor link
'Table' is niet per definitie de regel van goed MVC, het is gewoon een implementatie van het Zend Framework.

Quote:
(models op dit moment ook niet wegens tijdgebrek :))

Ahum, gauw aanpassen, het scheelt je juist tijd ;) Jij maakt dus gebruik van het VC pattern? ;)
Gewijzigd op 28/12/2010 15:26:39 door Niels K
 
Ozzie PHP

Ozzie PHP

28/12/2010 15:44:59
Quote Anchor link
hehe... jij snapt 'm ;)
 
The Ultimate

The Ultimate

28/12/2010 15:59:19
Quote Anchor link
@Kees:
Allereerst bedankt voor het advies om niet meer met de oude MySQL extensies te werken.

Daarnaast bedankt voor jouw geduld en begrip. Het is voor iemand die altijd Top-Down heeft gewerkt en onlangs pas op OOP is overgestapt hele lastige materie, juist omdat het zo abstract is. De eerste stap is gemaakt: het OOP-denken. Nu nog het MVC gebeuren. Ik lees er wel een hoop over maar ik denk dat ik het pas echt goed begrijp als ik zelf een kleine MVC toepassing in elkaar heb gestoken.

Wat betreft jouw uitleg: duidelijk, voor elke var een get en set aanmaken.

@Niels:
Bedankt voor het duidelijke MVC overzicht. Dit was ik natuurlijk al wel een aantal keren tegengekomen en het verhaal Model View Controller en het voordeel daarvan is mij meer dan duidelijk. Het probleem (voor velen denk ik) is dat het zo 'abstract' is aangezien de pagina pas in het laatste stadium (view) vorm krijgt.

Is het een idee om het Zend Framework te downloaden en daarmee aan de slag te gaan of denk je dan dat ik door de bomen het bos niet meer zie? Het is volgens mij haast onmogelijk om een klein, werkend MVC scriptje te maken....klopt dat?
Gewijzigd op 28/12/2010 15:59:57 door The Ultimate
 
Niels K

Niels K

28/12/2010 16:14:30
Quote Anchor link
Quote:
Allereerst bedankt voor het advies om niet meer met de oude MySQL extensies te werken.

Tja, op zich kan je dit nog makkelijk een jaar of 2 volhouden zonder dat je er problemen mee krijgt. Maar niet te min raad ik je ook gewoon PDO aan.

Quote:
Is het een idee om het Zend Framework te downloaden en daarmee aan de slag te gaan of denk je dan dat ik door de bomen het bos niet meer zie? Het is volgens mij haast onmogelijk om een klein, werkend MVC scriptje te maken....klopt dat?

Wat noem jij klein? Een blog? Nee, dat is gewoon prima in MVC te doen. Geef anders wat voorbeelden van OO wat je om wilt zetten in MVC, dan hoop ik je daarbij te helpen.
 
Kees Schepers

kees Schepers

28/12/2010 16:41:19
Quote Anchor link
Je kunt in principe alles in MVC zetten. Hoe klein het ook is. Voor echt kleine applicaties vind ik het overbodig maar om ermee te leren werken is het goed te doen. Het 'installeren' van een basis Zend Framework MVC site is echt simpel. Hier zijn ook heel veel tutorials over trouwens.

Object georiënteerd programmeren heeft trouwens niets te maken met MVC, andersom wel. Je hoeft dus niet perse iets in het MVC model te bouwen wil je object georiënteerd programmeren. Object georiënteerd programmeren is een denkwijze / programmeer stijl. Je moet object georiënteerd "denken" om het te begrijpen. Zelfde als met Engels, je kunt pas goed Engels spreken en verstaan als je er ook in "denkt" (tijdens mijn stage in Kenia begon ik na een half jaar zelfs in het Engels te dromen haha).

Maar goed je moet ook wat geduld hebben met het leren ervan. Op een gegeven moment ga je het grote voordeel ervan in zien. Advies van mijn kant is gewoon er blijven spelen ermee, en niet in te grote stappen.

Succes!
 
Niels K

Niels K

28/12/2010 16:42:46
Quote Anchor link
Waarom volgens jouw 'zachtjes aan'? Je kan er veel voordeel mee doen als je het snapt. Dus waarom niet even die moeite nemen om het te leren?
Gewijzigd op 28/12/2010 16:42:59 door Niels K
 
Kees Schepers

kees Schepers

28/12/2010 16:50:30
Quote Anchor link
Ik redeneer het vanuit mijn eigen ervaring. De ene pikt het sneller op als de ander. Maar tuurlijk kun je er voordeel mee doen als je het snapt. Als je het snapt inderdaad. OOP en MVC leer je niet zomaar in een paar uur, althans voor de meeste dan denk ik. Als je net bezig bent met OOP en dan meteen alles in MVC gaat bouwen dan maak je in mijn ogen te grote stappen waardoor je de basis van deze dingen aan je ontgaat. Maar goed ligt ook aan je achtergrond en ervaring.
 
Niels K

Niels K

28/12/2010 16:51:52
Quote Anchor link
Daar heb je dan gelijk in. Maar ik dacht dat het min of meer onderschatte :)
Maar eerst OO en daarna MVC dat is waar je helemaal gelijk in hebt.

Maar goed, zoals ik daarnet al zei ik zal straks wat commentaar over de klasse plaatsen, ben nu op het werk, daar kan ik geen hele verhalen gaan typen.
Gewijzigd op 28/12/2010 16:55:58 door Niels K
 
The Ultimate

The Ultimate

28/12/2010 17:04:51
Quote Anchor link
Ben nu een uitgebreide tut aan het volgen op YouTube. Een of andere Rus (integral30) legt het stap-voor-stap uit. Hij begint zelfs in tutorial step 4 met een user login systeem.

Het grote voordeel van het gebruik van ZF is dat als je het eenmaal onder de knie hebt, je natuurlijk niet verder meer hoeft te zoeken. Aangezien ik nog nooit enige scripting heb gevolgd op school (studeer namelijk rechten en ben dus geen programmer) duurt het allemaal wat langer en heb je soms bij de simpelste zaken nog vragen.

@Niels: Ik ben bezig met een geheel nieuwe webapplicatie. Ik heb de applicatie op een locale server (usbwebserver) in Top-Down style (overigens niet OOP) gemaakt. Nu wilde ik de applicatie opnieuw maar dan OOP opzetten voordat ik de website live gooi. Maar als ik dan beter meteen maar de extra stap kan zetten door ZF te gebruiken/leren dan moet ik dat misschien maar doen. Kost wel wat meer tijd, maar dan hoef ik de komende tijd niet meer aan te sleutelen.
 
Moe BE

Moe BE

28/12/2010 18:36:32
Quote Anchor link
Ieder zijn mening natuurlijk, maar volgens mij kan je beter beginnen met een iets minder uitgebreid framework als het zend framework. Ik stel voor te starten met Kohana of CodeIgniter.
 
Niels K

Niels K

28/12/2010 18:46:07
Quote Anchor link
Zoals ik vanmiddag zei zal ik nog wat commentaar plaatse op het script zelf, i.p.v van alleen maar te discussiëren over MVC en frameworks.

Een paar dingen die beter kunnen op welke ik mis, volgorde klopt niet ik schrijf gewoon op wat ik op dat moment denk.

- De benaming van je klasses en wat ze doen is niet geheel correct ( kom ik zo op terug )
- het script moet altijd openstaan voor uitbreiding, daarom kan je het beste al je variabelen protected maken.
- Ik zie allemaal underscores voor je variabelen staan, waarvoor is dat? Coding style? Ik vind dat altijd zo lelijk staan maar goed..
- over je constructor: Je kan het beste je variabelen een beteren benaming geven, $id zegt niet zoveel, kan het database id wezen, emial id, user id.
- Je kan ook voor de database een dependency afdwingen, dan krijg je dus dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    public function __construct( $userId, Database $db ) {}
?>

- Verder is het niet gebruikelijk om in de constructor bepaalde queries of actie uit te voeren, daarvoor kan je gewoon het beste een andere methode voor realiseren.
- Je while is een beetje vaag? Waarom gebruik je $this->_db(fetchAssoc) ? Kan je het beste gewoon in dit veranderen $this->_db->fetchAssoc( $result );
- Ik mis PHPdoc

Goed meer heeft je klasse niet, en dat is juist het grootste probleem, de aanpak van je user klasse kan veel beter. Hier onder een voorbeeldje hoe ik een authentificatie aanpak. De klasses moet je zelf even realiseren, is gelijk een goede oefening voor je, het is overigens met het Zend_Framework gemaakt, maar dat maakt niet uit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$authInstance
= Zend_Auth::getInstance( );

// Controleren of er al een identity bestaat
if( !$authInstance->hasIdentity( ) ) {
    // Redirecten naar login ( controller )
}    
?>


Mijn login controller ziet er dan zo uit.

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
<?php

/**
 * LoginController, controller welke verantwoordelijk is voor authenticeren van een klant
 *
 * @category    GestioneCMS
 * @package        Controllers
 * @subpackage    LoginController
 * @see            BaseController
 *
 * @author        Niels kieviet <[email protected]>
 * @version        $Revision v1.00$
 * @copyright    Copyright (c) 2010, Niels Kieviet
 */

class LoginController extends BaseController  
{
    /**
     * Action methode welke verantwoordelijk is voor het opvangen van een request
     * wat is gedaan vanuit het login form. Aan de hand van de gegevens trachten tot het
     * autenticeren van de opgegeven credentials
     *
     * @access    Public
     * @return    Void
     */

    public function indexAction( )
    {

        if( !Zend_Auth::getInstance( )->hasIdentity( ) ) {    
            $this->_helper->layout->setLayout( 'login' );
            $errors = array( );
            if( $this->getRequest( )->isPost( ) ) {
                if( !Zend_Validate::is( $this->getRequest( )->getParam( 'customer' ), 'NotEmpty' ) ) {
                    $errors['customer'] = true;
                }

                if( !Zend_Validate::is( $this->getRequest( )->getParam( 'username' ), 'NotEmpty' ) ) {
                    $errors['username'] = true;
                }

                if( !Zend_Validate::is( $this->getRequest( )->getParam( 'password' ), 'NotEmpty' ) ) {
                    $errors['password'] = true;
                }

                if( count( $errors ) != 0 ) {
                    $this->view->errors = $errors;
                }

                else {
                    $customer = $this->getRequest( )->getParam( 'customer' );
                    $username = $this->getRequest( )->getParam( 'username' );
                    $password = $this->getRequest( )->getParam( 'password' );
                    if( $this->process( $customer, $username, $password ) ) {
                        $this->_redirect( 'index' );
                    }
                }
            }
        }
    }

    
    /**
     * Methode voor het controleren, authenticeren van de opgegeven credentials
     *
     * @param    String    $client
     * @param    String    $username
     * @param    String    $password
     * @access    Protected
     * @return    Void
     */

    protected function process( $customer, $username, $password )
    {

        $authAdapter = $this->getAuthAdapter( );
        $authAdapter->setCustomer( $customer );
        $authAdapter->setIdentity( $username );
        $authAdapter->setCredential( $password );
        $authAdapter->_authenticateCreateSelect( );
        $auth = Zend_Auth::getInstance( );
        $result = $auth->authenticate( $authAdapter );
        if( $result->isValid( ) ) {
            $customer = $authAdapter->getResultRowObject( );
            $auth->getStorage( )->write( $customer );
            return true;
        }

        return false;
    }

    
    /**
     * Methode tot het verkrijgen en retourneren van de authenticatie adapter
     *
     * @access    Protected
     * @return    Adapter
     */

    protected function getAuthAdapter( )
    {

        $dbAdapter = Zend_Db_Table::getDefaultAdapter( );
        $authAdapter = new Adapter_Auth_Adapter( $dbAdapter );
        $authAdapter->setTableName( 'auth_user' )
                    ->
setIdentityColumn( 'username' )
                    ->
setCredentialColumn( 'password' );
                    //->setCredentialTreatment( 'SHA1');
        return $authAdapter;
    }
}


?>

Het is misschien even een lastig stukje om hierbij de juiste klasses te realiseren maar als je dat éénmaal doorhebt moet OO geen probleem meer opleveren. Ik zie net dat jelmer je al een opzet heeft gegeven. Aan de hand daarvan moet dit ook te doen zijn.

Goed, we gaan verder met de database, zoals ik net zei kan je beter een dependency aanmaken, nogmaals zo dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
public function __construct( $userId, Database $db ) {}
?>

Om dit te laten werken moet je even weten hoe je de huidige database klasse moet veranderen. Ik heb een voorbeeld voor je gemaakt in gewoon mysql zodat je het goed kunt begrijpen.

Als je gaat beginnen met het maken van een klasse moet je eerst goed bedenken wat deze doet, schrijf dit in het begin ook gewoon op. Later zal dit allemaal vanzelf gaan.

Goed, database handler. Wie / Wat / Waar / Hoe / omschrijving dus even voor jou hieronder uitgewerkt:

Een database is een applicatie waarin alle data van een applicatie op een gestructureerde
manier opgeslagen kan worden. Data wordt opgeslagen in de vorm van tabellen die relaties
met elkaar hebben. De data kan gemanipuleerd worden doormiddel van zogeheten SQL queries.

Het resultaat van een query komt terug in de vorm van een resultset. Dit zijn de resultaten
in een intern formaat. Deze kunnen omgezet worden in voor PHP leesbare formaten.

Er zijn diverse databases in omloop. De meest gebruikte voor PHP is MySQL, maar er zijn ook
MSSQL, PostgreSQL en nog vele anderen.

Goed, als we de zelfstandige naam worden even enkelvoud maken en ze eruit plukken krijg je deze lijst:

- Database
- Applicatie
- Data
- Manier
- Tabel
- Relatie
- SQL query
- Resultaat
- Resultset
- Formaat
- PHP
- MySQL
- MSSQL
- PostgreSQL

Er staan nu een aantal woorden tussen die we niet nodig hebben bij het modelleren van de database, of er staan een aantal dubbele tussen, zo hebben we het woord 'applicatie' wat enkel verwijst naar de definitie van Database. Deze klasse dient geen enkel doel in onze applicatie.

Dan hebben we Manier; de manier waarop data opgeslagen wordt. Dit is niet iets voor onze applicatie, want wij willen alleen een laag op de database bouwen, dus niet de database zelf implementeren. De manier waarop de data opgeslagen wordt is dus niet van belang voor ons. Voor Formaat geldt precies hetzelfde.

PHP is de taal waarin we de code gaan implementeren daar is dus geen klasse voor nodig. Ook deze kunnen we uit ons lijstje strepen. Je houd dus de volgende lijst over:

- Database
- Data
- Tabel
- Relatie
- SQL query
- Resultaat
- Resultset
- MySQL
- MSSQL
- PostgreSQL

Ook in dit lijstje valt echter nog te strepen. Zo is resultaat en resultset ongeveer hetzelfde, beide representeren het resultaat van een query. We kunnen de klasse Resultaat dus wegstrepen. Dan hebben we nog een aantal klasse die we beter in een ander formaat dan een klasse kunnen representeren.

Zo hebben we data, maar dat is handiger om dat gewoon in een array neer te zetten, of bij het resultset de gebruiker zelf te laten kiezen welk formaat hij / zij de data in wil. Deze kan dus ook weg uit de lijst. Een beetje hetzelfde geldt voor SQL query. Dit kan gewoon in een string representatie.

Wat je vaak ziet tegenwoordig is dat er een hele bibliotheek omheen gebouwd wordt waarmee je doormiddel van code SQL queries kan samenstellen. Het nadeel hiervan is dat dit ontzettend ingewikkeld wordt; SQL is een complexe taal en dat het ook nog eens traag wordt terwijl gewoon de string representatie net zo flexibel is en een stuk eenvoudiger. We zullen dan ook gewoon gebruik maken van SQL queries. Deze klasse kan uit de lijst weggestreept worden.

Dan hebben we nog twee klassen die met de inhoud van de database te maken hebben. Dit is tabel en relatie. Dit is iets dat de database intern bij houdt, maar onze applicatie hoeft zich hier niet van bewust te zijn, deze kan gewoon toe met het uitvoeren van queries en de data die daar uit komt.

Ons lijstje wordt een stuk kleiner en komt er als volgt uit te zien:

- Database
- Resultset
- MySQL
- MSSQL
- PostgreSQL

Nu we een mooi compact lijstje over hebben , kunnen we gaan bedenken welke attributen er bij elke klasse horen.

De Database heeft in PHP code meestal een connectie handler, deze zal dus ergens in de database bijgehouden moeten worden. Dat is ook direct het enige dat PHP nodig heeft om queries uit te voeren op de database. Dat is dus het enige attribuut. Voor MySQL, MSSQL en PostgreSQL geldt precies hetzelfde. Deze gebruiken allemaal hun eigen functies, maar al deze functies maken gebruik van deze connectie handler.

Voor het resultset hebben we een vergelijkbare handler nodig. Als je een query uitvoert op de database krijg je altijd een result handler terug waarop je vervolgens een aantal functies uitvoert om de data eruit te krijgen. Wat alleen wel handig is om te onthouden is dat deze functies ook weer specifiek zijn voor elk database type. We hebben dus eigenlijk voor elke database type een Resultset klasse nodig.


Als we deze attributen en klassen toevoegen krijgen we de volgende lijst:

Database
- connectie
Resultset
- resultaat
MySQL
-connectie

En zo bijvoorbeeld ook voor de volgende database types
MSSQL
- connectie
PostgreSQL
- connectie
MySQLResult
- resultaat
MSSQLResult
- resultaat
PostgreSQLResult
- resultaat

We kunnen nu gaan bedenken welke methoden elke klasse zou moeten hebben, maar voordat we gaan doen zal je misschien al opgevallen zijn dat een aantal klassen sterk op elkaar lijken wat betreft ontwerp. Als je voor jezelf al wat methoden bedacht hebt, zal je zien dat voor deze klassen ook de methoden hetzelfde blijven. Alleen de implementatie van de methoden verschilt. Hier is waar overerving komt kijken in de OOP wereld.

Overerving doe je op het moment dat je kan zeggen: Klas1 is een Klas2. In dit geval gaat dat op voor MySQL, MSSQL en PostgreSQL. Dit zijn allemaal databases, dus zullen ze ook allemaal erven uit Database. Het zelfde geldt ook voor MySQLResult, MSSQLResult en PostgreSQLResult met Resultset. Dit zijn allemaal resultsets van de betreffende databases. Alleen de functies die gebruikt worden om de database aan te spreken verschillen.

Het volgende wat op valt is dat we voor Database en Resultset eigenlijk helemaal geen implementatie kunnen geven voor de verschillende methoden. Alle implementatie is immers database specifiek. Toch willen we deze overkoepelende klasse hebben, zodat we later ergens af kunnen dwingen dat er een Database verwacht wordt zonder aan te geven welke Database we eigenlijk afdwingen. Voor deze specifieke gevallen is in PHP de Interface in het leven geroepen. Database en Resultset zijn beide interfaces en hebben dus alleen methoden en geen attributen.


Voor consistentie is het ook handig om de klasse Resultset even te hernoemen. De andere resultaat klassen heten allemaal DatabasenaamKlasse. Dit kunnen we voor Resultset dus ook doen en deze DatabaseResult noemen.

Nu zijn we zo ver om methoden te bedenken. Aangezien we geen database specifieke methoden nodig hebben, hoeven we alleen methoden te bedenken voor beide interfaces.

De database klasse was voornamelijk bedoelt voor het bijhouden van de verbinding en het uitvoeren van queries. Hier hebben we dus een methode maak_verbinding() bij nodig en een methode query() om een query uit te voeren. Het resultaat van de methode query is vervolgens een DatabaseResult waarmee de data uit het resultaat gehaald kan worden.

De interface DatabaseResult heeft dan ook de methoden fetch_assoc(); haal data in de vorm van een array uit de database, aantal_regels(); het aantal regels dat het resultaat bevat en eventueel een methode om direct alle resultaten in een array te krijgen: fetch_alles().

De bedachte methoden komen geen van allen uit de beschrijving, maar zijn gewoon de meest gebruikte functies met databases. Het bedenken van deze methoden komt voornamelijk neer op ervaring hebben met database.

We krijgen nu de volgende klassen en interfaces:

Database
- maak_verbinding()
- query()
DatabaseResult
- fetch_assoc()
- fetch_alles()
- aantal_regels()
MySQL
- connectie
MySQLResult
- resultaat

Nu we dit allemaal weten is het tijd voor het schrijven van de klasses. Ik heb expres phpdoc eruit gelaten om het voor jouw overzichtelijk te houden.

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
<?php
interface Database
{
    public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam);
    public function query($query);
}

  
interface DatabaResult
{
    public function fetch_assoc();
    public function fetch_alles();
    public function aantal_regels();
}

  
class MySQL implements Database
{
    private $connectie;
  
    public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
    {
    }

  
    public function query($query)
    {
    }
}

  
class MSSQL implements Database
{
    private $connectie;
  
    public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
    {
    }

  
    public function query($query)
    {
    }
}

  
class PostgreSQL implements Database
{
    private $connectie
  
    public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
    {
    }

  
    public function query($query)
    {
    }
}

  
class MySQLResult implements DatabaseResult
{
    private $resultaat;
  
    public function fetch_assoc()
    {
    }

  
    public function fetch_alles()
    {
    }

  
    public function aantal_regels()
    {
    }
}

  
class MSSQLResult implements DatabaseResult
{
    private $resultaat;
  
    public function fetch_assoc()
    {
    }

  
    public function fetch_alles()
    {
    }

  
    public function aantal_regels()
    {
    }
}

  
class PostgreSQLResult implements DatabaseResult
{
    private $resultaat;
  
    public function fetch_assoc()
    {
    }

  
    public function fetch_alles()
    {
    }

  
    public function aantal_regels()
    {
    }
}

?>


En ook de MySQLResult klasse

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
<?php
class MySQLResult implements DatabaseResult
{
    private $resultaat;
  
    public function __construct($resultaat)
    {

        $this->resultaat = $resultaat;
    }

  
    public function fetch_assoc()
    {

        return mysql_fetch_assoc($this->resultaat);
    }

  
    public function fetch_alles()
    {

        $resultaat = array();
        while($regel = $this->fetch_assoc())
        {

            $resultaat[] = $regel;
        }

  
        return $resultaat;
    }

  
    public function aantal_regels()
    {

        return mysql_num_rows($this->resultaat);
    }
}

?>


Nu we de resultaat klasse hebben, kunnen we ook de MySQL klasse implementeren

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
<?php
class MySQL implements Database
{
    private $connectie;
  
    public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
    {

        if(!($this->connectie = mysql_connect($host, $gebruikersnaam, $wachtwoord)))
            throw new DatabaseException('Kon geen verbinding maken');
  
        if(!mysql_select_db($naam, $this->connectie))
            throw new DatabaseException(mysql_error());
    }

  
    public function query($query)
    {

        $resultaat = mysql_query($query, $this->connectie);
  
        if(!$resultaat)
            throw new DatabaseException(mysql_error());
  
        return new MySQLResult($resultaat);
    }
}

?>


Nu kan je dus de database gebruiken zoals ik een aantal regels hierboven verteld heb :) Snap je het nog een beetje?

Quote:
Maar als ik dan beter meteen maar de extra stap kan zetten door ZF te gebruiken/leren dan moet ik dat misschien maar doen. Kost wel wat meer tijd, maar dan hoef ik de komende tijd niet meer aan te sleutelen.

Dat raad ik je zeker aan ja.

Zoals ik vanmiddag heb verteld zal ik nog even ingaan op het 'dependency injection', maar ik denk dat het verstandiger is dat we dat in een nieuw topic doen?


Edit:

@Moe BE
Waarom? Ik vind juist dat zend framework helemaal niet uitgebreid is en makkelijk om te begrijpen. Verder vind ik codeigniter niet echt goed gecodeerd maar goed dat is mijn mening maar :) Dan zou ik je nog eerder symfony2 aanraden, dikke shizzle met hun dependency injection container :D


Oh, aan het eind van de rit nog even het volgende:

- Je hebt het in je startpost alleen maar over functies,, maar het zijn methoden.
- Je hoeft niet perse .class in elke klasse bestand te zetten, zeker als je volledig je applicatie in OO bouwt is dat vanzelf spreken, en bij het volgen van de MVC structuur ook niet. Dan noem je een bestand gewoon bv: TestController.php
Gewijzigd op 28/12/2010 19:12:45 door Niels K
 
The Ultimate

The Ultimate

28/12/2010 20:07:22
Quote Anchor link
Holy! Dat is pas een uitleg! Wow... wordt er zelfs een beetje stil van.

Ik zal zo goed als mogelijk reageren op jouw bijzondere post.

Niels Kieviet op 28/12/2010 18:46:07:
- het script moet altijd openstaan voor uitbreiding, daarom kan je het beste al je variabelen protected maken.
Ok. Staat genoteerd. Was me aangeleerd bij OOP aangezien je dan gedwongen bent de waardes uit de classe zelf te gebruiken.

Niels Kieviet op 28/12/2010 18:46:07:
- Ik zie allemaal underscores voor je variabelen staan, waarvoor is dat? Coding style? Ik vind dat altijd zo lelijk staan maar goed..
Klopt. Ook een overblijfsel van mijn OOP-leergang. Daarbij heb ik mijzelf aangeleerd om een underscore te gebruiken voor private variables.

Niels Kieviet op 28/12/2010 18:46:07:
- over je constructor: Je kan het beste je variabelen een beteren benaming geven, $id zegt niet zoveel, kan het database id wezen, emial id, user id.
Ok, duidelijk.

Niels Kieviet op 28/12/2010 18:46:07:
- Je kan ook voor de database een dependency afdwingen, dan krijg je dus dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    public function __construct( $userId, Database $db ) {}
?>
Dependency? Is dat waarom het woord ‘Database’ daar tussen de arguments staat?

Niels Kieviet op 28/12/2010 18:46:07:
- Verder is het niet gebruikelijk om in de constructor bepaalde queries of actie uit te voeren, daarvoor kan je gewoon het beste een andere methode voor realiseren.
Ok. Dat was inderdaad ook een van mijn vragen en iets wat veel mensen mij aanraadden maar waar ik altijd mijn twijfels over heb gehad.

Niels Kieviet op 28/12/2010 18:46:07:
- Je while is een beetje vaag? Waarom gebruik je $this->_db(fetchAssoc) ? Kan je het beste gewoon in dit veranderen $this->_db->fetchAssoc( $result );
Ok. Thanks.

Niels Kieviet op 28/12/2010 18:46:07:
- Ik mis PHPdoc
Klopt. Was net begonnen aan de class. Nog geen tijd gehad voor documentatie. Doe ik normaal gesproken wel.

Niels Kieviet op 28/12/2010 18:46:07:
Goed meer heeft je klasse niet, en dat is juist het grootste probleem, de aanpak van je user klasse kan veel beter. Hier onder een voorbeeldje hoe ik een authentificatie aanpak. De klasses moet je zelf even realiseren, is gelijk een goede oefening voor je, het is overigens met het Zend_Framework gemaakt, maar dat maakt niet uit.
Ok. Zal vanavond/morgen proberen om een OOP authenticatie te maken op basis van jouw voorbeeld. Heb zojuist toevallig ook een uitgebreide tut over Zend_Authentication gekeken dus dat komt goed van pas.

Niels Kieviet op 28/12/2010 18:46:07:
Goed, we gaan verder met de database, zoals ik net zei kan je beter een dependency aanmaken, nogmaals zo dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
public function __construct( $userId, Database $db ) {}
?>

Om dit te laten werken moet je even weten hoe je de huidige database klasse moet veranderen. Ik heb een voorbeeld voor je gemaakt in gewoon mysql zodat je het goed kunt begrijpen.
Yup, zeer tof van je. Duidelijke uitleg.
Niels Kieviet op 28/12/2010 18:46:07:
Nu kan je dus de database gebruiken zoals ik een aantal regels hierboven verteld heb :) Snap je het nog een beetje?
Het duizelt me een beetje, maar ik geloof dat ik je redelijk kan volgen ;-)[/quote]

Niels Kieviet op 28/12/2010 18:46:07:
Zoals ik vanmiddag heb verteld zal ik nog even ingaan op het 'dependency injection', maar ik denk dat het verstandiger is dat we dat in een nieuw topic doen?
Ben daar eerlijk gezegd wel benieuwd naar. Zal er eens op googelen.

Niels Kieviet op 28/12/2010 18:46:07:
Oh, aan het eind van de rit nog even het volgende:
- Je hebt het in je startpost alleen maar over functies,, maar het zijn methoden.
Ja, het noemen van de juiste benaming (methods,arguments,etc.) blijft een probleem.

Niels Kieviet op 28/12/2010 18:46:07:
- Je hoeft niet perse .class in elke klasse bestand te zetten, zeker als je volledig je applicatie in OO bouwt is dat vanzelf spreken, en bij het volgen van de MVC structuur ook niet. Dan noem je een bestand gewoon bv: TestController.php
Ik zag het inderdaad al in de ZF tutorial. Ik doe dat op dit moment wel aangezien ik het netjes vind staan. In OOP zal ik het waarschijnlijk zo blijven doen. Wanneer ik gebruik ga maken van ZF gaat dit er uiteraard direct aan.

Ok. Morgen zet ik – als het goed gaat – mijn authentication classe online op basis van het ZF voorbeeld dat jij mij gaf.
 
Mike Smit

Mike Smit

28/12/2010 20:10:02
Quote Anchor link
Ja ik hoef ook niet vaak een half uur te scrollen. :)
 
Niels K

Niels K

28/12/2010 20:24:57
Quote Anchor link
Quote:
Holy! Dat is pas een uitleg! Wow... wordt er zelfs een beetje stil van

Haha, dankjewel daar doen we het voor ;)

Quote:
Dependency? Is dat waarom het woord ‘Database’ daar tussen de arguments staat?

Ja, het houd gewoon in dat er een database klasse wordt verwacht die voldoet aan de interface.

Quote:
Ok. Dat was inderdaad ook een van mijn vragen en iets wat veel mensen mij aanraadden maar waar ik altijd mijn twijfels over heb gehad.

Dan weet je dat nu ook weer :)

Quote:
Ok. Zal vanavond/morgen proberen om een OOP authenticatie te maken op basis van jouw voorbeeld. Heb zojuist toevallig ook een uitgebreide tut over Zend_Authentication gekeken dus dat komt goed van pas.

Prima, prima we wachten rustig af :-)

Quote:
Yup, zeer tof van je. Duidelijke uitleg.

Geen probleem, het geeft ook voldoening om mensen te helpen.

Quote:
Het duizelt me een beetje, maar ik geloof dat ik je redelijk kan volgen

Dat is mooi, want dat is echt de basis van OO. en als je nog vragen hebt, stel ze gerust, dan zal ik zover mijn kennis het toelaat ze beantwoorden.

Quote:
Ben daar eerlijk gezegd wel benieuwd naar. Zal er eens op googelen.

Wil daar wel een stuk over schrijven, maar dat wordt dan denk ik een nieuw topic? Of zeg jij doe maar in deze?

Quote:
Ja, het noemen van de juiste benaming (methods,arguments,etc.) blijft een probleem.

Dat blijft een stukje ervaring, je leert het vanzelf.

Quote:
Ok. Morgen zet ik – als het goed gaat – mijn authentication classe online op basis van het ZF voorbeeld dat jij mij gaf.

Prima ;)

Wat overigens ook een mooi topic voor het ontwerpen van een applicatie in OO is het volgende: klik.

@Mike
Goede reacties van lezers stimuleren mij om lange antwoorden / uitleggingen te schrijven.
 
Mike Smit

Mike Smit

28/12/2010 20:27:43
Quote Anchor link
De topic starter verwacht en hoopt dat er enkel inhoudelijk word gereageerd op zijn topic. Maar inderdaad soms is het ook wel eens belangrijk om te laten weten dat iemand trots mag zijn op zijn of haar werk en in jouw geval een reactie. :)
Gewijzigd op 28/12/2010 20:28:16 door Mike Smit
 
Niels K

Niels K

28/12/2010 20:34:09
Quote Anchor link
Oh maar ik bedoelde het niet negatief hoor ;-) En volgens mij heeft hij al genoeg stof tot nadenken, zeker als dependency injection er nog eens bij komt.
 

Pagina: « vorige 1 2 3 4 volgende »



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.