unset

Petit nouveau ! | 6 Messages

27 août 2008, 14:17

 if (unset($_GET['c'])) {
//instructions
}
//resultat : unexpected T_UNSET
if (!isset($_GET['c'])) {
//instructions
}
//resultat : ça marche

Pourquoi ( question conne mais c'est le genre de truc qui me donne envie de tuer :evil: ) ?

Mammouth du PHP | 1353 Messages

27 août 2008, 14:53

Bonjour

Cela me parait totalement logique :

La fonction unset() a pour effet de détruire une variable. Ainsi elle ne peut s executer QUE si la variable que l'on veut détruire existe.

La fonction isset() teste l'existence d'une variable. Ainsi si la variable existe la fonction renvoie true, sinon elle renvoie false.

La meilleure option est ainsi de faire par exemple :
if(isset($var)) { //si la variable existe
      unset($var); //on la détruit
}
Comme ca tu es sur de ne jamais avoir de message d erreur mais de toujours détruire la variable si elle existe.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 août 2008, 14:53

isSet() teste si ta variable contient quelque chose différent de la valeur NULL
unSet() vide ta variable, et donc si elle n'existe pas et que tu as le réglage d'affichage d'erreurs au plus élevé, tu as une erreur (impossible de vider une variable qui n'existe pas).

Je te conseille plutôt d'utiliser le test empty()
if (empty($_GET['c'])) {
  //instructions
}
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Petit nouveau ! | 6 Messages

27 août 2008, 15:03

Merci bien , empty , je retien bien :D
Si il y a une chaine vide c'est empty ? genre $test = ""; , empty($test) == true ?

Mammouth du PHP | 1353 Messages

27 août 2008, 15:12

Oui, regardes la doc de la fonction empty()
Ce qui suit est considéré comme étant vide :
"" (une chaîne vide)
0 (0 en tant qu'entier)
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
var $var; (une variable déclarée, mais sans valeur dans une classe)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 6 Messages

27 août 2008, 16:15

ça c'est embêtant , mais bon , ça irra pour ce que j'ai à faire .

$cota_post_resolu++; :D

Mammouth du PHP | 1353 Messages

27 août 2008, 16:19

ça c'est embêtant , mais bon , ça irra pour ce que j'ai à faire .
Nous pourrions sûrement t'orienter mieux si tu nous disais ce que tu as à faire :D

Personnellement je trouve ca logique qu'une chaine vide ("") soit considérée comme vide... ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 6 Messages

27 août 2008, 16:31

bah moi ça va ça baigne , mes GET ne prenne jamais la valeur "" ( et même si ils la prennai j'aurai pas besoin de différencier ) donc empty() me convient tout à fait pourtant :

<?php
$a=isset($test);
$test="";
$b=isset($test);
//$a = false $b = true
?>

Ca peut en gener certain ( empty ne fera pas la difference c'est ça que je veu dire ) .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 août 2008, 17:03

Ca ne devrait pas géner "is set" signifie "est ce que ma variable est définie ?", tandis que "empty" va controler si la variable est : null ou non définie, vide, égale à 0, à false, à array() ...

Suffit donc juste d'utiliser la fonction qui correspond à son besoin ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...