niet de waarde van variable opslaan maar de variable
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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"
?>
$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"
?>
Gewijzigd op 03/04/2020 13:47:56 door gert-willem Sanders
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?
want ik wil het niet in een echo maar ik kan dat blijkbaar niet uitleggen
Gewijzigd op 03/04/2020 14:26:27 door gert-willem Sanders
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$ikbeneenvariabelenaam = "elke keer wat anders";
$probleem = "{$ikbeneenvariabelenaam}";
echo "Hier staat: ". $probleem;
?>
$ikbeneenvariabelenaam = "elke keer wat anders";
$probleem = "{$ikbeneenvariabelenaam}";
echo "Hier staat: ". $probleem;
?>
dan word het {$_SESSION['mynaam']}
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:
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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// definitie
function mijnFunctieTwee($sessieVariabeleIndex) {
// doe hier iets met $_SESSION[$sessieVariabeleIndex];
}
?>
// definitie
function mijnFunctieTwee($sessieVariabeleIndex) {
// doe hier iets met $_SESSION[$sessieVariabeleIndex];
}
?>
Deze zou je vervolgens kunnen aanroepen met:
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
EDIT: nog een ander ding waar verwarring over lijkt te bestaan:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$fruit = 'appel';
$testEen = '$fruit'; // levert letterlijk de string "$fruit" (zonder quotes)
$testTwee = "$fruit"; // levert de string "appel" (zonder quotes)
?>
$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.
Gewijzigd op 03/04/2020 15:41:48 door Thomas van den Heuvel
variabele variabele gebruiken.
Als die variabele variabelenamen echter zijn gebaseerd op variabele kolomnamen in databasetabellen, zou ik altijd een array gebruiken.
Als je een variabele variabelenaam nodig hebt, kun je een 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.
Thomas van den Heuvel op 03/04/2020 16:33:34:
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.
HMM ik geef het op.
plaats ik
twee regels ervoor staat gewoon echo $_SESSION['mynaam']; waar netjes jan word gezet.
maar bedankt allemaal.
beetje eigenwijs maar ik doe nu
Eenzelfde variabele voor verschillende doeleinden gebruiken (naam van een gebruiker, een permissie (?), een datum) is ook niet echt aan te bevelen... Ik zou het ontwerp herzien, want dit wordt op den duur een onleesbare brei.