Hallo allemaal,

ik wil vanuit een mysql database een aantal functies uitvoeren
bv

toon($row['var1'],$row['var2']);

alleen $row['var2'] moet een variable naam bevatten $_SESSION['mynaam']

zodat de functie zo wordt

toon('waarde van row var1',$_SESSION['mynaam']);


ik weet niet hoe ik dit moet googlen :)

Groetjes Gert-Willem
Dat kan gewoon...?

<?php
$ikbeneenvariabelenaam = "Hallo!";
echo "Hier staat: $ikbeneenvariabelenaam";

// of nog beter met variabelen los van de quotes
echo "Hier staat: ".$ikbeneenvariabelenaam;
?>

<?php
$ikbeneenvariabelenaam = "elke keer wat anders";

$probleem = "$ikbeneenvariabelenaam"; (komt uit de database)

echo "Hier staat: ". $probleem;
//dan krijg ik
"Hier staat: $ikbeneenvariabelenaam"
//en ik wil 
"Hier staat : elke keer wat anders"
?>
een functie moet 1 taak hebben.

bijvoorbeeld weergeven van een selectbox.

Ik snap dat "weergeven van gebruikers in een selectbox" ook als 1 ding gezien kan worden, maar dat is te veel.

je geeft nu aan de functie "gebruik díe tabel" om een select op te doen. Maar: straks wil je ook nog ergens op sorteren. Of je wilt alleen gebruikers die het recht "edit" hebben. Of "edit" en die bovendien een gmail-mailadres hebben.
Dat wil je niet allemaal via 25 parameters meegeven.

splits het dus op: maak een generieke "maak een selectbox" en doe verder niets anders.
Hij zou eigenlijk zelfs niet eens "echo" moeten bevatten, maar het geheel als string terug geven.

op die manier kun je zo'n input ook nog anders gebruiken dan "direct naar het scherm"


(En mocht je inderdaad je vars nummeren: ik heb ooit een heel oude applicatie moeten bewerken waarin toen query's met letterlijk 85 kolommen gedraaid werden die allemaal in $aValues[0] tot en met $aValues[85] terecht kwamen: dat is een hel om te bewerken, want dat is echt niet te doen. (en oude PHP kon toen met Oracle query's niet anders dan numeriek fetchen)
Ik zie overigens niet in waarom je de waarde van een variabele in een echo wilt uitvoeren?
ja maar kan het.
want ik wil het niet in een echo maar ik kan dat blijkbaar niet uitleggen
 <?php
$ikbeneenvariabelenaam = "elke keer wat anders";

$probleem = "{$ikbeneenvariabelenaam}";

echo "Hier staat: ". $probleem;
?>
Een aanpak waarbij je letterlijke uitgeschreven namen van variabelen in een database stopt, waarbij je deze string als variabele zou moeten evalueren, lijkt mij geen goed plan.

Als je een specifieke sessie-variabele wilt gebruiken zou je deze dus letterlijk als parameter mee kunnen geven, waarbij je dus garantie moet hebben dat, of gewoon controleert of deze bestaat:
<?php
// aanroep
mijnFunctie($_SESSION['whatever']);
?>


En als deze op een of andere manier varieert - maar dit zou al een zogenaamde code smell (verkeerd ontwerp / brakke code) kunnen inhouden - dan zou je aan de index kunnen refereren in de definitie:
<?php
// definitie
function mijnFunctieTwee($sessieVariabeleIndex) {
    // doe hier iets met $_SESSION[$sessieVariabeleIndex];
}
?>

Deze zou je vervolgens kunnen aanroepen met:
<?php
// aanroep
mijnFunctieTwee('whatever');
?>

En dan heb je dus in wezen een soort van dynamische variant van de eerdere functie mijnFunctie().

En zo zijn er waarschijnlijk nog legio andere, en zinnigere, aanpakken te verzinnen dan wat er nu gebeurt.

De vraag is echter of dit in dit geval echt een goede ontwerpstrategie is.

We zouden meer code moeten zien om hier een oordeel over moeten vormen maar mijn eerste "gut feeling" (en het feit dat er var1, var2, var3 etc. wordt gebruikt) zegt mij: waarschijnlijk niet.

Een goede functie zou zijn: "bouwt een dropdown aan de hand van aangeleverde data".
Wat jij nu hebt zijn meerdere functies die min of meer hetzelfde doen is een aanpak die je dwingt om elke keer opnieuw een functie te schrijven: nu is het er eent voor users, en later mogelijk voor weer wat anders. Dit komt doordat ze zo (té) specifiek zijn - dit ligt in de definitie verankerd omdat je *in* de functie allerlei specifieke queries uitvoert, daardoor is zo'n functie niet inzetbaar voor een ander, maar soortgelijk doel. En dat is niet het idee van functies.

EDIT: nog een ander ding waar verwarring over lijkt te bestaan:
<?php
$fruit = 'appel';

$testEen = '$fruit';  // levert letterlijk de string "$fruit" (zonder quotes)
$testTwee = "$fruit"; // levert de string "appel" (zonder quotes)
?>

Dit is hoe strings werken: een string met dubbele quotes evalueert de inhoud (van o.a. variabelen), een string met enkele quotes evalueert enkel bepaalde escape-karakters geloof ik, maar laat variabelen verder ongemoeid.

Ik zou deze kennis echter niet gebruiken om voort te borduren op de huidige aanpak, maar even een stap terug nemen en een betere aanpak verzinnen.
Als je een variabele variabelenaam nodig hebt, kun je een variabele variabele gebruiken.

Als die variabele variabelenamen echter zijn gebaseerd op variabele kolomnamen in databasetabellen, zou ik altijd een array gebruiken.
Ik kan slechts een handjevol gevallen verzinnen waarin variabele variabelen wensenlijk zijn. En dit zijn alle uitzonderingen. Zoals @Ward aangeeft (en ik hierboven ook) zijn er vaak (betere) alternatieven.

Reageren