Page 1 sur 1

unset

Posté : 27 août 2008, 14:17
par dev-track
 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: ) ?

Posté : 27 août 2008, 14:53
par guilt92
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.

Posté : 27 août 2008, 14:53
par mere-teresa
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
}

Posté : 27 août 2008, 15:03
par dev-track
Merci bien , empty , je retien bien :D
Si il y a une chaine vide c'est empty ? genre $test = ""; , empty($test) == true ?

Posté : 27 août 2008, 15:12
par guilt92
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)

Posté : 27 août 2008, 16:15
par dev-track
ça c'est embêtant , mais bon , ça irra pour ce que j'ai à faire .

$cota_post_resolu++; :D

Posté : 27 août 2008, 16:19
par guilt92
ç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... ;)

Posté : 27 août 2008, 16:31
par dev-track
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 ) .

Posté : 27 août 2008, 17:03
par Ryle
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 ;)