welke fetch mode?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Developer Angular & Kotlin

Dit ga je doen Het (door)ontwikkelen van mobiele apps en webapplicaties; Het opstellen van technisch ontwerp en het bespreken van ontwerpen met de software architect; Het uitvoeren van werkzaamheden op het gebied van technisch testen; Het in de gaten houden van nieuwe ontwikkelingen op jouw vakgebied en het adviseren van de organisatie hierover. Hier ga je werken Het gaat om een bekend internationaal handelsbedrijf met ruim 800 medewerkers, verdeeld over verschillende deelbedrijven. Deze organisatie is van oorsprong een familiebedrijf, er wordt hard gewerkt, er heerst een no nonsense en doeners mentaliteit, een informele sfeer en er is een mix van

Bekijk vacature »

Senior Front-End Developer

Als Senior Front-End Developer bij Coolblue verbeter je de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Wat doe je als Senior Front-End Developer bij Coolblue? Als Senior Front-end Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Senior Front-end Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Nadenken

Bekijk vacature »

Frontend Developer - Leeuwarden

Frontend Developer – Leeuwarden Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider

Bekijk vacature »

.NET Developer C# VB

Samengevat: Deze werkgever is actief in software voor het matchen van vraag en aanbod van gebruikte auto-onderdelen. Ben jij een .NET Developer? Heb je ervaring met het ontwikkelen (REST) en integreren van webservices? Vaste baan: C# .NET Developer C# VB HBO €2.600 - €6.200 Wij ontwikkelen software om vraag en aanbod van onderdelen van personenauto's bij elkaar te brengen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. De branche van dit bedrijf is Automotive. Functie: Voor de vacature als .NET Developer Dordrecht HBO ga je

Bekijk vacature »

Front-end developer wanted! (Angular, React, Vue.j

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

IT Manager team PaaS

TenneT is hard groeiende om haar ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Lead PaaS die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je wordt de Teammanager (Lead) van een nieuw team binnen de afdeling Basic van Information Technology and Facilities (ITF) van TenneT. Het team heet Platform as a Service. Hier wordt elke dag in een goede sfeer met zijn allen hard gewerkt om vanuit IT

Bekijk vacature »

Junior Front end developer

Functie Als Front end developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

Front-end Developer

Dit ga je doen Je komt in een DevOps-cultuur te werken waarbij je met je team werkt aan de front-end van diverse brand websites; Het ontwerpen van functionele en grafische ontwerpen die worden geïmplementeerd; Draagt zorg voor het maken van analyses; Je werkt nauw met je collega’s samen en geeft elkaar feedback en suggesties waar nodig; Het uitwerken van vraagstukken die afkomstig zijn van verschillende klanten; Hier ga je werken Deze marktleider op gebied van fietsen en fietservaring is gevestigd in twee provincies, verspreid over meerdere locaties. Jij zult voornamelijk in regio Joure aan de slag gaan. De organisatie doelt

Bekijk vacature »

Front end developer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers met passie voor hun vak. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van ontwerp en ontwikkeling zullen samenkomen in een proof of concept. Nadat is vastgesteld dat de oplossing voldoet aan de belangrijkste behoeftes worden producten of services gevalideerd door middel van korte iteraties. Hiermee zorgen ze ervoor dat het werk voldoet aan de technische vereisten en gebruikersbehoefte. Door het inzetten van de nieuwste technologieën die toekomstbestendig zijn weten ze klanten omver te blazen. Ook geven en organiseren ze veel

Bekijk vacature »

SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 13382 Introductie We is looking for a HANA Developer to work for our client. The candidate has to have an experience in building Data Intensive Applications (DIA’s). The role of a HANA Developer at ASML involves working on building Data Intensive Applications in an industrial/enterprise environment. The primary responsibility is to handle data from various sources and determine the best way to structure it for use by data analysts, who will run queries and algorithms against it for predictive and prescriptive analytics through machine learning. Wat verwachten we van jou?

Bekijk vacature »

Junior Fullstack Developer

Functie omschrijving Heb jij je universitair diploma Informatica afgerond en ben jij op zoek naar een startersfunctie waar jouw ontwikkeling in een hoog vaandel staat? Voor een softwarebedrijf in Amsterdam zijn wij op zoek naar een Junior Fullstack Developer. Je begint met een op maat gemaakte training om de kennis bij te spijkeren die jij nog mist. Uiteraard leer je het meeste tijdens je werk, maar de training geeft je hiervoor alvast de juiste handvatten. Je kunt het volgende verwachten! Jij ontwikkelt in technieken als Java, Javascript en SQL. Je werkt hierbij volgens de Agile/Scrum methode; Na het afronden van

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Java developer (remote)

Functie Wat ga je doen als Java Developer? Jij als Java ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 ontwikkelaars binnen onze organisatie waarbij jij de brug slaat tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je jouw taken op voor de dag. Hieronder een aantal taken die jij zal uitvoeren: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden

Bekijk vacature »

Back end developer Digital agency

Functie Heb jij altijd al eens bij een bedrijf willen werken waar jij géén nummertje bent, die alleen maar uitvoerend werk doet? Dan zou je hier perfect passen! Tuurlijk, je werkt aan projecten voor grote of kleine bedrijven… Het enige verschil hier is, jouw mening telt hier écht. Jouw inbreng wordt gewaardeerd, serieus genomen en gebruikt. En vergeet niet, je werkt niet alleen aan deze projecten. Er werken in totaal ruim 20 developers en designers, onderverdeeld over 3 development teams. Voornamelijk bestaande uit Medior en Senior developers, die samen voor een inspirerende en ambitieuze omgeving zorgen. Hun visie is namelijk

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Pagina: « vorige 1 2 3 volgende »

Ozzie PHP

Ozzie PHP

23/05/2013 16:57:33
Quote Anchor link
Huh, ik snap 'm even niet:

Juist op de manier zoals jij het nu doet, gaat het toch mis als ik van database wissel?

Stel ik doe dit:
$row = $db->getRow(PDO::FETCH_ASSOC); // dit stukje code staat dus buiten de databse class

En dan wissel ik van database, maar dan staat in de code nog steeds dit:
$row = $db->getRow(PDO::FETCH_ASSOC);

Dan gebruik ik toch juist de verkeerde define?
 
PHP hulp

PHP hulp

17/11/2024 22:29:02
 
Erwin H

Erwin H

23/05/2013 17:07:32
Quote Anchor link
Maar als je dit doet:
cons ASSOC = PDO::FETCH_ASSOC;

Dan zit je of met hetzelfde probleem, of je moet in elke class die je gaat gebruiken elke keer die constantes aanpassen EN je hebt een probleem met het aanroepen ervan. Een class constante kan je namelijk niet zonder classname gebruiken. De manier waarop je de constante dus gebruikt is niet
$row = $db->getRow(ASSOC);

maar:
$row = $db->getRow(Classname::ASSOC);
Gebruik je opeens een andere database class, dan moet je dus ook al deze aanroepen aanpassen. Dat wil je niet.

Dus, je maakt een eigen set aan constantes, met eigen waardes en die hoef je NOOIT meer aan te passen.
 
Ozzie PHP

Ozzie PHP

23/05/2013 17:11:23
Quote Anchor link
Ja, ik moet ze dan wel in iedere class zetten. Maar het lijkt me handiger om de defines te gebruiken dan de bijbehorende integers. Wat als men ineens een integer verandert. Als je de defines gebruikt gaat het dan nog steeds goed.

Mijn idee was dan om niet dit te doen:
$row = $db->getRow(Classname::ASSOC);

maar dit:

$row = $db->getRow('assoc');

In de getRow functie zou je dan de fetchmode kunnen ophalen door te zetten:

self::$fetch_mode;

Dan wordt de class constant assoc aangeroepen die vervolgens de juiste define teruggeeft.
 
Erwin H

Erwin H

23/05/2013 17:16:46
Quote Anchor link
Ozzie PHP op 23/05/2013 17:11:23:
Wat als men ineens een integer verandert.

Dat kan niet. Een integer blijft een integer in php.

Wat jij blijkbaar niet doorhebt is dat die integer helemaal niets betekent. Die zijn niet gerelateerd aan de PDO constantes. In je database class zal je dus aan de hand van je eigen gedefinieerde constantes moeten bepalen welke database specifieke fetch mode je moet gebruiken. Je zal dus een vertaling moeten maken van je eigen constante naar, in dit geval, PDO fetch constantes.



Toevoeging op 23/05/2013 17:18:03:

Ozzie PHP op 23/05/2013 17:11:23:
$row = $db->getRow('assoc');

Uh, en nu ga je weer terug naar strings? Volgens mij ben ik je kwijt.
Gewijzigd op 23/05/2013 17:17:12 door Erwin H
 
Ozzie PHP

Ozzie PHP

23/05/2013 17:36:23
Quote Anchor link
Hihihi... volgens mij zijn we elkaar even kwijt.

Zoals ik het zie (correct me if I'm wrong...).
De PDO constante PDO::FETCH_ASSOC heeft als waarde een of andere integer, bijv. (dit verzin ik nu even) 1. Stel ik gebruik niet een PDO database, maar een FOO database dan heb je daar wellicht een constante FOO::FETCH_ASSOC en deze heeft als waarde de integer 3. De waardes voor dezelfde manier van fetchen zijn dus verschillend, maar in je code wil je altijd dezelfde waarde kunnen gebruiken.

Ik wil niet dat als ik een PDO db gebruik ik dit moet doen:
$row = $db->getRow(PDO::FETCH_ASSOC);

en als ik besluit om een FOO database te gaan gebruiken, dat ik dan overal in mijn code de bovenstaande regel moet aanpassen naar:
$row = $db->getRow(FOO::FETCH_ASSOC);

Daarom lijkt het me dus handig om altijd 1 waarde mee te geven 'assoc'.
$row = $db->getRow('assoc');

In de PDO class "vertaal" ik dan de value 'assoc' naar de juiste define. En dat zou je dan via class constants kunnen doen.

In de PDO class krijg je dan:
cons assoc = PDO::FETCH_ASSOC;

en in de FOO class krijg je dan:
cons assoc = FOO::FETCH_ASSOC;

Snap je nu beter wat ik bedoel?

Uiteraard als jij een betere oplossing weet, hoor ik het graag!
 
Erwin H

Erwin H

23/05/2013 17:45:30
Quote Anchor link
Even terug naar de uitgangspunten:
1) Je wil geen strings gebruiken om de mode door te geven want dan kan je je vertikken
2) Je wil zonder problemen van database interface kunnen veranderen
3) Je wil bestaande code niet hoeven aan te passen bij een verandering of uitbreiding

Mijn voorstel:
nieuwe class waarin je zelf constantes definieert die de fetch modus aangeven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
abstract class Ozzie_Fetch(
  const ASSOC = 0;
  const NUM = 1;
  const BOTH = 2;
  const INVERTED = 3;
  const DOWNUNDER = 4;
);

?>


In je database object aanroepen doe je nu dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$row
= $db->getRow(Ozzie_Fetch::ASSOC);
?>


In je PDO database class vertaal je dat met een eenvoudig switch:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
switch( $mode ){
  case
Ozzie_Fetch::ASSOC:
    return PDO::FETCH_ASSOC;
  case
Ozzie_Fetch::BOTH:
    return PDO::FETCH_BOTH;
  default:

    return PDO::FETCH_ASSOC;
}

?>


Even checken of dit aan de uitgangspunten voldoet:
1) Je wil geen strings gebruiken om de mode door te geven want dan kan je je vertikken
-> ja, ik gebruik namelijk een constante die mijn editor kan aanvullen
2) Je wil zonder problemen van database interface kunnen veranderen
-> geen probleem, constantes zijn database class, interface en driver onafhankelijk
3) Je wil bestaande code niet hoeven aan te passen bij een verandering of uitbreiding
-> ook geen probleem, een nieuwe fetch methode zal bij een huidige class gewoon de default gaan gebruiken.

Bovendien, als ik nu een andere driver of interface ga gebruiken die een al bestaande fetch methode niet ondersteunt dan kom ik ook niet in de problemen, omdat ik ook dan gewoon kan terugvallen op een default.
 
Ozzie PHP

Ozzie PHP

23/05/2013 18:06:38
Quote Anchor link
Ah, oke... nu begin ik beter te begrijpen wat je bedoelt!

Dit snap ik nog niet helemaal:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
switch( $mode ){
  case
Ozzie_Fetch::ASSOC:
    return PDO::FETCH_ASSOC;
  case
Ozzie_Fetch::BOTH:
    return PDO::FETCH_BOTH;
  default:

    return PDO::FETCH_ASSOC;
}

?>

Die $mode is dan in feit een integer geworden... en die kan ik dan weer vergelijken met de fetch constants?
 
Erwin H

Erwin H

23/05/2013 18:10:27
Quote Anchor link
Ja, Fetch_Ozzie::ASSOC = 0, zo hebben we het gedefinieerd. Dus als mode de waarde nul heeft dan is dat gelijk aan Fetch_Ozzie::ASSOC.

Doe ook maar eens
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo Fetch_Ozzie::ASSOC.'/'.Fetch_Ozzie::NUM.'/'.Fetch_Ozzie::BOTH;
?>

Resultaat: 0/1/2

En dus zou je ook gewoon dit kunnen doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$row
= $db->getRow(0);
?>

Alleen dat wil je niet, want dan krijg je weer 'uh, wat was 0 ook alweer en wat was 1?'.
 
Wouter J

Wouter J

23/05/2013 19:09:33
Quote Anchor link
Ozzie, constants zijn gewoon variabelen. Het enige verschil is dat de waarde van een constant vast (constant) is en van een variabele is hij variabel.
 
Ozzie PHP

Ozzie PHP

23/05/2013 20:05:50
Quote Anchor link
Ah oké. Ik begin het te begrijpen nu!! Thanks :)

Maar nu ben ik even zo maar hardop aan het denken...

Stel ik doe niet dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
abstract class Ozzie_Fetch(
  const ASSOC = 0;
  const NUM = 1;
  const BOTH = 2;
  const INVERTED = 3;
  const DOWNUNDER = 4;
);

?>

Maar dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
abstract class Ozzie_Fetch(
  const ASSOC = 'ASSOC';
  const NUM = 'NUM';
  const BOTH = 'BOTH';
  const INVERTED = 'INVERTED';
  const DOWNUNDER = 'DOWNUNDER';
);

?>

En in plaats van dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
switch( $mode ){
  case
Ozzie_Fetch::ASSOC:
    return PDO::FETCH_ASSOC;
  case
Ozzie_Fetch::BOTH:
    return PDO::FETCH_BOTH;
  default:

    return PDO::FETCH_ASSOC;
}

?>

Zou ik dan in de PDO class constanten maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Ozzie_PDO {
  const ASSOC = PDO::FETCH_ASSOC;
  const NUM = PDO::FETCH_NUM;
  const BOTH = PDO::FETCH_BOTH;
  // ...
}
?>

En in de getRow($fetch_method) doe ik dan zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public function getRow($fetch_mode) {
  $fetch_mode = self::$fetch_mode;
  // ...
}
?>

Zou zoiets kunnen?

Offtopic:

Wat zijn inverted en downunder voor fetch methodes?
 
Wouter J

Wouter J

23/05/2013 20:11:22
Quote Anchor link
Dat zou kunnen werken, ware het niet dat self::$foo de foo property van de klasse opvraagt, ipv de constante.
 
Ozzie PHP

Ozzie PHP

23/05/2013 20:21:03
Quote Anchor link
Ah oke... en ik kan een constante niet op een andere manier opvragen? Bijv. Ozzie_PDO::$fetch_mode? Of zal dat ook niet werken?
 
Wouter J

Wouter J

23/05/2013 20:46:16
Quote Anchor link
de enige manier die ik kan bedenken zou Ozzie_PDO::{$fetch_mode} zijn.
 
Ozzie PHP

Ozzie PHP

23/05/2013 20:47:38
Quote Anchor link
Ah oké... zal het straks eens gaan testen dan. Het lijkt me wel een mooiere/handigere methode dan de switch implementatie.
 
Eddy E

Eddy E

23/05/2013 20:50:14
Quote Anchor link
Of, lekker lui, via global. Ik weet niet of dat ook classe-overstijgend is, maar is een poging waard.
 
Ozzie PHP

Ozzie PHP

23/05/2013 21:16:33
Quote Anchor link
Wouter J op 23/05/2013 20:46:16:
de enige manier die ik kan bedenken zou Ozzie_PDO::{$fetch_mode} zijn.

Wouter, had jij dit getest? Ik krijg het niet werkend...?



Toevoeging op 23/05/2013 21:26:00:

Ik lijk het nu werkend te hebben via de functie "constant()";
 
Erwin H

Erwin H

23/05/2013 23:36:16
Quote Anchor link
Ozzie PHP op 23/05/2013 20:05:50:
Offtopic:

Wat zijn inverted en downunder voor fetch methodes?

ha ha, als iemand die zich 'Ozzie' noemt zou je toch moeten weten waar de term 'downunder' vandaan komt. En inverted zit indezelfde hoek, hoewel je met een beetje goede wil daar nog een echte fetch methode van zou kunnen maken.

Overigens kan je waarschijnlijk best doen wat je wilt, maar zorg dat je jezelf niet blind staart op PDO. De strings die je nu maakt zijn namelijk maakt zijn wel zodanig dat je die PDO constantes er makkelijk van kunt maken, maar krijg je morgen iets heel anders dan lukt het meteen niet meer.
 
Ozzie PHP

Ozzie PHP

23/05/2013 23:41:32
Quote Anchor link
Hehe... daar heeft mijn Ozzie dan weer niks mee te maken :)

Wat bedoel je met "De strings die je nu maakt zijn namelijk maakt zijn wel zodanig dat je die PDO constantes er makkelijk van kunt maken, maar krijg je morgen iets heel anders dan lukt het meteen niet meer."

Ik kan toch aan iedere string een fetch mode koppelen?
 
Erwin H

Erwin H

24/05/2013 10:31:14
Quote Anchor link
Volgens mij heb ik iets over het hoofd gezien in jouw methode. Naast de algemene constantes, maak je ook nog constantes aan in de PDO class, die dan weer de waarde krijgen van de echte PDO constantes....

Er is alleen wel 1 probleem mee. Als je morgen een nieuwe fetch methode nodig hebt omdat je een nieuwe database interface gaat gebruiken, dan heb je die niet gedefinieerd in al je oude database classes. Geef je die nieuwe fetch methode dan door in de getRow methode dan krijg je een foutmelding. Dat is dus niet in overeenstemming met mijn uitgangspunt:
Quote:
3) Je wil bestaande code niet hoeven aan te passen bij een verandering of uitbreiding
Gewijzigd op 24/05/2013 10:39:19 door Erwin H
 
Ozzie PHP

Ozzie PHP

24/05/2013 11:27:24
Quote Anchor link
Erwin H op 24/05/2013 10:31:14:
Volgens mij heb ik iets over het hoofd gezien in jouw methode. Naast de algemene constantes, maak je ook nog constantes aan in de PDO class, die dan weer de waarde krijgen van de echte PDO constantes....

Ja, inderdaad.

Erwin H op 24/05/2013 10:31:14:
Er is alleen wel 1 probleem mee. Als je morgen een nieuwe fetch methode nodig hebt omdat je een nieuwe database interface gaat gebruiken, dan heb je die niet gedefinieerd in al je oude database classes. Geef je die nieuwe fetch methode dan door in de getRow methode dan krijg je een foutmelding. Dat is dus niet in overeenstemming met mijn uitgangspunt:
Quote:
3) Je wil bestaande code niet hoeven aan te passen bij een verandering of uitbreiding

Hmmm, daar heb je inderdaad een goed punt. Ik ben wel benieuwd wat daar een goede oplossing voor is.

Sowieso als ik geen fetch method meegeef dan default ik naar de assoc method. Maar wat inderdaad als je in de fetch class een constant aanmaakt die in een ander database type niet bestaat.

Bij PDO is dat trouwens al afgevangen heb ik gemerkt. Als ik een waarde ingeef die niet overeenkomt met een een van de constanten, dan default ie naar de BOTH fetch methode. Maar of iedere database dat zo netjes afhandelt is maar de vraag.

Wat ik zou kunnen doen is een beveiliging inbouwen, waardoor als een constant niet bestaat, hij automatisch terugvalt op de ASSOC methode.

MAAR...

Als ik dan even verder denk. Meteen even een leuk praktijkvoorbeeld (zie ook mijn andere vraag). PDO kent een PDO::FETCH_CLASS methode waarmee een nieuwe class wordt aangemaakt die automatisch gevuld wordt met gegevens uit de database. Lijkt me heel handig, maar ik vermoed dat deze manier van fetchen niet door alle andere databases wordt ondersteund (misschien kun jij dit bevestigen of ontkennen?). Stel nu dat ik zou overstappen op database X, maar in mijn code gebruik ik nog wel de fetch_class methode. Dan zou ik een default kunnen inbouwen dat ie terugvalt op de assoc methode... maar als je heel eerlijk bent, wat heb ik daar eigenlijk aan? Want in de code verwacht je dan dat er een object wordt aangemaakt, terwijl dat nu niet gebeurt, dus alsnog loopt je code compleet de soep in.

Hoe zou je dit volgens jou dan moeten ondervangen? Het enige wat ik me nu kan bedenken is dat je uitsluitend fetch methodes gebruikt die door alle databases worden ondersteund. Alleen dat zou dan weer betekenen dat ik fetch_class niet kan gebruiken, wat me nu juist weer heel handig lijkt. Of ik moet accepteren dat ik (voorlopig) alleen PDO kan gebruiken (waar ik op dit moment overigens geen bezwaren in zie).

Het is een heel verhaal geworden inmiddels. Je hoeft niet overal op te reageren hoor anders kost het jou ook erg veel tijd, maar ik ben wel benieuwd hoe jij dit zou oplossen. Alvast bedankt weer voor je reactie.
Gewijzigd op 24/05/2013 11:30:44 door Ozzie PHP
 

Pagina: « vorige 1 2 3 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.