niet de waarde van variable opslaan maar de variable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

- Ariën  -
Beheerder

- Ariën -

03/04/2020 13:36:23
Quote Anchor link
Dat kan gewoon...?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$ikbeneenvariabelenaam
= "Hallo!";
echo "Hier staat: $ikbeneenvariabelenaam";

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

PHP hulp

28/11/2024 09:41:34
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 13:46:18
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
?>
Gewijzigd op 03/04/2020 13:47:56 door gert-willem Sanders
 
Ivo P

Ivo P

03/04/2020 14:02:53
Quote Anchor link
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)
 
- Ariën  -
Beheerder

- Ariën -

03/04/2020 14:13:31
Quote Anchor link
Ik zie overigens niet in waarom je de waarde van een variabele in een echo wilt uitvoeren?
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 14:25:29
Quote Anchor link
ja maar kan het.
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
 
Adoptive Solution

Adoptive Solution

03/04/2020 14:26:50
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$ikbeneenvariabelenaam
= "elke keer wat anders";

$probleem = "{$ikbeneenvariabelenaam}";

echo "Hier staat: ". $probleem;
?>
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 14:56:27
Quote Anchor link
dan word het {$_SESSION['mynaam']}
 
Thomas van den Heuvel

Thomas van den Heuvel

03/04/2020 15:19:08
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// definitie
function mijnFunctieTwee($sessieVariabeleIndex) {
    // doe hier iets met $_SESSION[$sessieVariabeleIndex];
}
?>

Deze zou je vervolgens kunnen aanroepen met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
?>

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
 
Ward van der Put
Moderator

Ward van der Put

03/04/2020 15:43:06
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/04/2020 16:33:34
Quote Anchor link
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.
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 17:29:29
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
funtie(${$row['var5']});
//krijg ik
Undefined variable: $_SESSION['mynaam']


twee regels ervoor staat gewoon echo $_SESSION['mynaam']; waar netjes jan word gezet.

maar bedankt allemaal.
beetje eigenwijs maar ik doe nu
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if ($row['var5']=='$_SESSION['mynaam']'){$var5= $_SESSION['mynaam'];} else
if ($row['var5']=='$mag'){$var5= $mag;} else if ($row['var5']=='$datum'){$var5= $datum;}
funtie($var5);// welke functie doet er niet toe
 
Thomas van den Heuvel

Thomas van den Heuvel

03/04/2020 17:34:03
Quote Anchor link
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.
 

Pagina: « vorige 1 2



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.