[PHP] variabelen declareren..

Pagina: 1
Acties:
  • 197 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021
Zoals elke "goede" php'er werk ikke met de 'error_reporting( E_ALL );' aan..
Ineens komen de kleinste dingentjes om de hoek zetten, en 1 daarvan is het feit dat je ALTIJD al de variabelen moet declareren..
Nou is dit opzich niet echt een probleem, want tja, in JAVA en C++ moet je dat ook gewoon. Punt was alleen dat je bij PHP altijd moet checken of deze bestaat en dergelijke. Enfin, dat resulteerde bij mij in hoop extra code, en lichte rsi.

Daarom ben ik een functie gaan verzinnen, en voor alsnog werkt deze perfect..
PHP:
1
2
3
4
5
function make_var( $var_name ) {
    $temp = "$var_name";
    global $$temp;
    IF ( empty( $$temp ) ) $$temp = "";
}

Met de aanroep
PHP:
1
 make_var( "MyVar" );
Mijn vraag is, kan iemand deze functie verbeteren en onderuit slaan met goede argumenten.. Of natuurlijk zeggen dat hij gewoon werkt..

42


Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
• Je globalt automagisch. Wat dus betekend dat je een hoop global vars krijgt :/
• Je waarom gebruik je de tussenstap $temp = "$var_name"; als je ook gewoon kan controleren of $var_name een string is :?
• Waarom laat je hem met een lege string initialiseren. Dat scheelt me een cast als er eigenlijk een int in moet. Dat kan redelijk schelen als je deze functie veel gebruikt

Acties:
  • 0 Henk 'm!

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Ik moet zeggen dat ik erg twijfel aan het nut van deze functie en of het wel zo verstandig is om het te gebruiken, maar goed...

Probeer dit eens:
PHP:
1
2
3
$myvar = 0;
make_var("myvar");
print($myvar); // geeft "" ipv 0

Je kunt dus beter ! isset($var_name) gebruiken ipv empty($var_name).

Het 3e punt wat Glimi noemt kun je trouwens oplossen door een default waarde als parameter mee te geven, dus make_var("myvar", 0) ofzo.

[miereneukmode]
Waarom heb je if met hoofdletters? Het is een keyword, net als bv function en global, dus het is logischer als je ze allemaal consequent lower/uppercase schrijft.
[/miereneukmode]
Glimi schreef op 19 november 2002 @ 23:39:
• Je globalt automagisch. Wat dus betekend dat je een hoop global vars krijgt :/
Dat is niet waar. global heeft alleen effect binnen de functie waarin je het gebruikt.

Acties:
  • 0 Henk 'm!

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021
Bedankt voor de replies tot dus ver..
Of het verstandig is om deze functie te gebruiken weet ik nog niet :D ik zie niet was hij in het geheugen doet enzo.. Maar de parse tijd blijft iig hetzelfde..

kleine aanpassingen
PHP:
1
2
3
4
5
function make_var($var_name, $value=0) {
    $temp = "$var_name";
    global $$temp;
    if ( !IsSet( $$temp ) ) $$temp = $value;
}

PHP: variabelen staat het een en ander, en wordt ook dus duidelijk waarom ik het op deze manier gedaan heb..

42


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

* drm snapt 't nut niet van deze functie.

Als een variabele niet geset is, initialiseert 'ie 'm op $value. Kortom, je gaat 'm probably gebruiken voor defaultwaarden, dus bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
make_var ( 'action', 'show' );

switch ( $action ) {
   case 'show':
      // ...
   break;
   case 'delete':
      // ...
   break;
}


begrijp ik dat goed? Verander dan je functienaam in iets wat gevoelsmatiger een beetje beter aangeeft wat de functie doet, want make_var vind ik persoonlijk niet zo duidelijk. Maak er dan iets van init_default_value () van ofzo.

Verder vind ik de functie ook niet zo handig, gezien je wanneer je 'm in bovenstaande situatie daadwerkelijk wilt gebruiken, je nog niet checkt op ongeldige invoer, maar alleen of een variabele geset is. Wat heeft dat dan voor zin :?

En als je eigenlijk iets anders wilt met deze functie, dan moet je me dat maar even uitleggen :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Ik snap er niks van wat je hiermee wilt.. en al helemaal niet wat dit met E_ALL te maken heeft :P

Ja je moet je variabelen declareren.. maar das niet anders dan gewoon in het begin even te zeggen

$myVar = 0;
$myArr = array();

Dat soort dingen.. kun je ze ook direct initialiseren op een bepaalde waarde.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Bosmonster ›
Ik denk dat topicstarter bedoelt, dat variabelen soms wel of niet meegegeven worden aan een pagina via GET of POST, ofzo. Dan weet je dus niet van te voren of ze geinitialiseerd zijn, en kan je dat ook niet zelf doen (want dan overschrijf je ze dus ;))

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021
Owkee, misschien sla ik ook geheel de plank mis :D
Mijn gedachten:

Als je in php een variabelen wilt declareren moet je dit meestal doen met
PHP:
1
 if ( !IsSet( $ja ) ) $ja = "een waarde";
Dit omdat je met php een pagina kan herladen en dan de mogelijkheid bestaat dat je je variabele overschrijft (denk aan een form)..

Dus ik verzin een funtie die eigenlijk niets anders doet dan het bovenstaande, maar dan netjes in een functie wat me weer wat code scheelt

42


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

drm schreef op 20 november 2002 @ 11:18:
Bosmonster ›
Ik denk dat topicstarter bedoelt, dat variabelen soms wel of niet meegegeven worden aan een pagina via GET of POST, ofzo. Dan weet je dus niet van te voren of ze geinitialiseerd zijn, en kan je dat ook niet zelf doen (want dan overschrijf je ze dus ;))


Dan ga je ervanuit dat je register_globals gebruikt...

Als je je sources altijd uit de daarvoor bedoelde superglobals haalt heb je dat probleem niet. En als je dan je overige variabelen initialiseert dan overschrijf je eventueel eerder gedeclareerde globals.

Oftewel.. gebruik gewoon niet de regeister_globals.. die zijn toch vies.

Waar je echter wel rekening mee moet houden is dat je doordat je variableen nu indices zijn van arrays (de superglobals) je ze altijd moet checken middels isset(), omdat je anders foutmeldingen krijgt over onbekende index.

dus altijd

if (isset($_POST['myvar'])) {}

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Bosmonster >
Tja, da's dus exact 'tzelfde probleem. Of je nou een waarschuwing krijgt "Variable not defined" of "Index not defined", 't probleem blijft

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Prutser_IA schreef op 20 november 2002 @ 11:20:
Owkee, misschien sla ik ook geheel de plank mis :D
Mijn gedachten:

Als je in php een variabelen wilt declareren moet je dit meestal doen met
PHP:
1
 if ( !IsSet( $ja ) ) $ja = "een waarde";
Dit omdat je met php een pagina kan herladen en dan de mogelijkheid bestaat dat je je variabele overschrijft (denk aan een form)..

Dus ik verzin een funtie die eigenlijk niets anders doet dan het bovenstaande, maar dan netjes in een functie wat me weer wat code scheelt
Dan zou ik het nog anders doen. ;) Je weet welke inkomende variabelen je gaat krijgen. Daarnaast weet je wat de waarden van die $_GET en $_POST variabelen mogen zijn. Als je dan een functie maakt om te checken doen dan zoiets als dit:
1. check of $_GET['someAction'] en/of $_POST['someAction'] zijn gezet (isset ofzo);
2. Assign ze naar een of andere local var (bijvoorbeeld:
PHP:
1
2
3
if ((!isset($action)) || $action == "" || /*etc etc*/)) {
$action=$_POST['someAction']);
}
)
3. Check of de waarden van die var mogen. Ik zou alle mogelijke waarden in een array stoppen, zodat je dat heel makkelijk kan doen. (if (in_array($binnengehaaldeVar,$array) ).
4. Eventueel gooi je dit allemaal in een while/for-loop.

Sundown Circus


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

misschien handig om te weten, een verzameling van get en post variabelen staat in $_REQUEST

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik je dan voor elke variabele die je in je code maakt die functie?
Die worden dan allemaal global. Is dat niet beetje onnodig.
Meestal heb je veel variabelen alleen binnen een script nodig en enkele belangrijke die zouden global moeten zijn. Die kun je ook eventueel in een sessie zetten.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

drm schreef op 20 November 2002 @ 12:47:
misschien handig om te weten, een verzameling van get en post variabelen staat in $_REQUEST
Goed punt. :P

Sundown Circus

Pagina: 1