Toon posts:

Een heus OO vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
En wel een waarbij ik met PHP werk! Ha! Niet wegrennen nu.. Ik ben bezig met een klein CRM-achtig iets. Ik heb dus een object welke zichzelf kan initialiseren met waarden van het aanroepende script, een statische methode waarmee ik een enkel record uit de database oproept, etc.

Ik heb echter 1 situatie waar ik de data-hiding moet doorbreken omdat ik niet zeker weet hoe ik het moet implementeren. Het gaat om het punt waarbij ik een bepaald record wil bewerken. Ik werk met Smarty, en in mijn template gebruik ik de associatieve array formData om form widgets te vullen.

Het probleem is nu, hoe krijg ik de data uit het object in deze array zonder dat ik daarbij het object forceer de widget namen van het desbetreffende form te kennen en mijn abstractie te breken en zonder het aanroepende script te forceren de inhoud van het desbetreffende object te kennen..

De code ziet er nu ongeveer zo uit:

PHP:
1
2
3
4
5
6
7
8
9
10
<?php

$bedrObj = Bedrijf::dbSelecteerEen($recordId);

$formData = array (
     'veld1' => $bedrObj->_veld1
    /* enzovoorts */
);

?>


Niet bepaald "zoals het hoort dus".. Ik hoor graag jullie suggesties..

[ Voor 4% gewijzigd door Verwijderd op 22-12-2002 12:02 ]


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Hoewel je best veel dingetjes goed hebt uitgelegd is het mij niet helemaal duidelijk welke data je precies opvraagt van je object.
Als je gegevens wilt tonen in een template, dus in gebruikers uitvoer zal dat toch publieke data zijn. Dat soort gegevens maak je dus beschikbaar via publieke-properties en/of methods zoals getVeld1() oid.

Er is dus eigenlijk iets mis je met klasse-model als je behoefte hebt om buiten af private velden te ïnspecteren. Om daarvoor een suggestie te kunnen geven moet je een iets concreter voorbeeld geven als veld1.

|_____vakje______|


Verwijderd

Topicstarter
CyberSnooP schreef op 22 december 2002 @ 13:32:
Hoewel je best veel dingetjes goed hebt uitgelegd is het mij niet helemaal duidelijk welke data je precies opvraagt van je object.
Als je gegevens wilt tonen in een template, dus in gebruikers uitvoer zal dat toch publieke data zijn. Dat soort gegevens maak je dus beschikbaar via publieke-properties en/of methods zoals getVeld1() oid.

Er is dus eigenlijk iets mis je met klasse-model als je behoefte hebt om buiten af private velden te ïnspecteren. Om daarvoor een suggestie te kunnen geven moet je een iets concreter voorbeeld geven als veld1.
Zoals je in principe van het kleine code voorbeeldje had kunnen afleiden gaat het hier om 'Bedrijfsinformatie', NAW gegevens. Ik zie alleen niet helemaal hoe dat relevant tot mijn probleem is ..

Het gebruik van Get&Setters als getVeld1() leiden tot probleem 1: het script moet weten hoe het object in elkaar steekt (qua attributen) en dat is iets wat ik wil voorkomen zoveel mogelijk wil voorkomen.

[ Voor 3% gewijzigd door Verwijderd op 22-12-2002 13:57 ]


Verwijderd

Topicstarter
*schop ende kick* :P

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

en

get_value('veld1')

ipv

get_value_veld1();

is geen oplossing?

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
Je zou een method kunnen maken die alle velden stuk voor stuk teruggeeft, desnoods in een struct met als velden eerst de naam en daarna de waarde. Dan kan je die method gewoon in een loop aanroepen en hem alles terug laten geven net zo lang tot alles is langsgekomen. Leuke is dan dat als je dan je datamodel aanpast je de presentatiecode niet hoeft aan te raken (en dat is volgens mij wat je wilt.)

Naamsuggestie voor de method: Enumerate :)

[ Voor 6% gewijzigd door JeroenB op 23-12-2002 11:36 . Reden: Naamsuggestie toegevoegd :) ]


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Verwijderd schreef op 22 december 2002 @ 13:52:
Het gebruik van Get&Setters als getVeld1() leiden tot probleem 1: het script moet weten hoe het object in elkaar steekt (qua attributen) en dat is iets wat ik wil voorkomen zoveel mogelijk wil voorkomen.
Het komt er dus op neer dat je een script wilt schrijven dat van willekeurige objecten gegevens kan weergeven zonder te weten welke gegevens dat zijn. Persoonlijk lijkt mij dat niet echt helemaal logisch, maar naast de enumerate oplossing kun ook nog denken aan:

Maak een method die intern een array samenstelt waarbij de keys veldnamen zijn en de values de bijbehorende waarden. Die method kan de gehele array in een keer teruggeven en je script kan inspecteren welke keys er zijn en aan de hand daarvan bijvoorbeeld een tabel opstellen.

Het is echter iets gebruikelijker om scripts te schrijven die wel gewoon weten welke attributen ze weer kunnen geven. In het geval van NAW gegevens weet je dat meestal ook, ookal wil je de mogelijkheid bewaren niet ingevulde gegevens niet weer te geven.

|_____vakje______|


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
CyberSnooP schreef op 23 December 2002 @ 12:16:
Het is echter iets gebruikelijker om scripts te schrijven die wel gewoon weten welke attributen ze weer kunnen geven. In het geval van NAW gegevens weet je dat meestal ook, ookal wil je de mogelijkheid bewaren niet ingevulde gegevens niet weer te geven.
Je kan ook via extra attributen (metadata) aangeven hoe velden moeten worden weergegeven of zelfs welke prioriteit ze bijvoorbeeld hebben om formulieren op verschillende niveau's te maken (alhoewel dat dan beter met verschillende enumerate methods te doen is.)
Pagina: 1