[PHP] Notices negeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik heb weleens de neiging om bepaalde notices te negeren. (Beter gezegd, ik dev voornamelijk met notices uit.)

Dingen als een formulier maken met daarin een variabele $_POST["username"] ofzo. Als je nog niks gepost hebt dan is die index undefined, niet erg netjes, maar wel handig om de data in het formulier meteen terug te krijgen als je post naar de file zelf toe.

Ik ben nu ik in een rewrite zit van de code de zooi toch aan het opnetten, maar ik vraag me af of dat nou eigenlijk wel zin heeft.

PHP:
1
$_POST["username"]


wordt:
PHP:
1
isset($_POST["username"]) ? $_POST["username"] : "";


ook niet echt de beauty-award, maar wel geen errors. Wat is jullie mening over de eerste manier?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php

class Request {

    /**
    * @return mixed
    * @param mixed $index
    * @param integer $type
    * @desc returns a get variable but with isset and optional type checking
    */
    public static function get($index, $type = null){

        if (isset($_GET[$index])){
        
            if (is_null($type)){
            
                return $_GET[$index];
            
            } else {
                
                return Type::setType($_GET[$index], $type);
                
            }
        
        } else {
            
            return false;
            
        }
    
    }

    /**
    * @return mixed
    * @param mixed $index
    * @param integer $type
    * @desc returns a post variable but with isset and optional type checking
    */
    public static function post($index, $type = null){

        if (isset($_POST[$index])){
        
            if (is_null($type)){
            
                return $_POST[$index];
            
            } else {
                
                return Type::setType($_POST[$index], $type);
                
            }
        
        } else {
            
            return false;
            
        }
    
    }

}
?>


Dan kan je gewoon met request::post('username'); het 'netjes' ophalen.

die typing is optioneel, maar das om ervoor te zorgen dat iets wat via get/post binnenkomt ook meteen het juiste type kan krijgen

request::post('id', Type::INTEGER);

zal meteen een int teruggeven.

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Persoonlijk vind ik de eerste manier niet zo netjes.

Er kan een betekenisverschil zijn tussen een niet verstuurde variabele en variabele met de waarde "". Misschien is er in een bepaalde applicatie geen verschil, maar dan vind ik het wel zo netjes om dat dan expliciet aan te geven (met een constructie zoals in jouw tweede manier).

Moraal: de lege string is niet niks! ;)

offtopic:
Als je je formulieren opbouwt met behulp van een generieke class, kun je dit - en veel andere suffe dingen - automatiseren!

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Apollo_Futurae schreef op 26 juli 2004 @ 00:36:
offtopic:
Als je je formulieren opbouwt met behulp van een generieke class, kun je dit - en veel andere suffe dingen - automatiseren!
Ik gebruik een generieke class ervoor, dus dat is misschien wel te doen. Bedankt voor de tip, dat ik daar nog niet aan gedacht heb...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Ook al is het niet netjes, ik gebruik altijd vrolijk de eerste manier. Ik ben er nog altijd niet over uit of ik nou een nette programmeur ben of een pragmatische. Ik denk een hybride :p.

En ik vind het een beetje zonde dat PHP geen waarde heeft die "niks" betekent. Imho zou elke taal die één moeten hebben, maar de enige die 'm heeft (voor zover ik weet dan) is Python. Oh, en Eiffel heeft er ook een.

En ja, NULL in C(++) natuurlijk, maar dat vind ik niet echt hetzelfde want die mag je alleen aan pointers toekennen.

Acties:
  • 0 Henk 'm!

  • creative8500
  • Registratie: September 2001
  • Laatst online: 01-02 14:14

creative8500

freedom.

Verwijderd schreef op 26 juli 2004 @ 09:04:
En ik vind het een beetje zonde dat PHP geen waarde heeft die "niks" betekent. Imho zou elke taal die één moeten hebben, maar de enige die 'm heeft (voor zover ik weet dan) is Python. Oh, en Eiffel heeft er ook een.

En ja, NULL in C(++) natuurlijk, maar dat vind ik niet echt hetzelfde want die mag je alleen aan pointers toekennen.
Als je strict met types omgaat je hiervoor een ongecaste null-waarde gebruiken. :)

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

PHP heeft dat wel: $var === FALSE geeft iets anders als $var === "" en $var === 0
Moet je wel de 3 =-tekens gebruiken. Ik gebruik ook vaak manier 1, maar dan zet ik er FALSE neer.

edit:
sorry, is natuurlijk niet echt NULL. maar je kan het onderscheid wel gebruiken met formulieren e.d.

[ Voor 28% gewijzigd door MBV op 26-07-2004 11:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

MBV schreef op 26 juli 2004 @ 11:29:
PHP heeft dat wel: $var === FALSE geeft iets anders als $var === "" en $var === 0
Moet je wel de 3 =-tekens gebruiken. Ik gebruik ook vaak manier 1, maar dan zet ik er FALSE neer.

edit:
sorry, is natuurlijk niet echt NULL. maar je kan het onderscheid wel gebruiken met formulieren e.d.
Bedankt voor de suggestie.

Het probleem dat ik hiermee blijf houden is dat FALSE ook nog een andere betekenis heeft: namelijk een onware Boolean.

Er bestaat in PHP, net zomin als in C++, een variabele-waarde die eenduidig `Niet toegewezen' betekent. Je kan het wel proberen te emuleren, met een paar truukjes hier en daar, maar ik blijf het een gemis aan de taal vinden. Niet dat ik 'm daarom niet gebruikt hoor :p, maar 't is gewoon `jammer'.
creative8500 schreef op 26 juli 2004 @ 09:15:
[...]

Als je strict met types omgaat je hiervoor een ongecaste null-waarde gebruiken. :)
Hmm... die opmerking snap ik niet, maar ik ben ook niet zo thuis in C.

[ Voor 16% gewijzigd door Verwijderd op 26-07-2004 11:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Om te kijken of een pagina aangevraagd is via POST gebruik ik altijd:
PHP:
1
2
3
if ($_SERVER['REQUEST_METHOD'] == "POST") {
  echo $_POST['var'];
}

(globaal)

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Verwijderd schreef op 26 juli 2004 @ 12:46:
Om te kijken of een pagina aangevraagd is via POST gebruik ik altijd:
PHP:
1

(globaal)
Dat is niet echt wat de TS bedoelt. En daarnaast: als een HTML-form invulveldje leeg wordt gelaten bij de submit, komt de POST-var ook niet aan geloof ik. Dus dan is je if-constructie wel true, maar bestaat de var misschien niet.

Acties:
  • 0 Henk 'm!

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

drm

f0pc0dert

Het is het eenvoudigst om e.e.a. te wrappen in ofwel een class ofwel een functie. Verder kun je voor niet-bestaande waarden gewoon consequent null gebruiken.

Iets in de trant van:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function request ( $name, $default = null ) {
   if ( isset ( $_REQUEST [ $name ] ) ) {
      return $_REQUEST [ $name ];
   } else {
      return $default;
   }
}

// ...
if ( is_null ( request ( 'some_var' ) ) {
   echo 'Missing!';
}

switch ( request ( 'page', 'home' ) ) {
   // ...
}

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

Pagina: 1