ID: 11466
User Update by: [EMAIL PROTECTED]
Status: Bogus
Bug Type: Variables related
Operating system: FreeBSD 3.5.1
PHP Version: 4.0.4pl1
Description: it works ambiguously to unset the global variable in function

oops, sorry.

  unset($var);               // unset doesn't works
  unset($arr["something"]);  // unset works


Previous Comments:
---------------------------------------------------------------------------

[2001-06-13 15:00:39] [EMAIL PROTECTED]
I think that it's a bug even if this is how it works. :(
'Cause unset can does or doesn't work like this.

function unset_test ()
{
  global $var;
  global $arr;

  unset($var);               // unset works
  unset($arr["something"]);  // unset doesn't works
}


---------------------------------------------------------------------------

[2001-06-13 13:32:23] [EMAIL PROTECTED]
Yes, this is how it works, not a bug.



---------------------------------------------------------------------------

[2001-06-13 11:14:10] [EMAIL PROTECTED]
These two sources are the same except the last line of the second one.

The former represents that it doesn't work to unset the global variable,
the latter that it only works when unset throught the $GLOBALS variable.

[SRC 1: unset doesn't work]
============================================================
<?php
function unset_variable ($name, $flag)
  {
    global $$name;
    global $GLOBALS;

    if ($flag & 1)
      {
        echo "  - <font color=magenta>unset $$name</font><br>n";
        unset($$name);
      }
    if ($flag & 2)
      {
        echo "  - <font color=magenta>unset $GLOBALS["$name"]</font><br>n";
        unset($GLOBALS[$name]);
      }
  }

function disp_variable ($name)
  {
    global $$name;
    global $GLOBALS;

    printf("  - $%s : %s<BR>n",
        $name, isset($$name) ? "<font color=green>".$$name."</font>" : "<font 
color=red>(unset)</font>");
    printf("  - $GLOBALS[%s] : %s<BR>n",
        $name, isset($GLOBALS[$name]) ? "<font color=green>".$GLOBALS[$name]."</font>" 
: "<font color=red>(unset)</font>");
  }

for ($i=0; $i < 4; $i++)
  {
    $name = "var$i";
    $$name = "VALUE_$i";
    $step = $i;
    $flag = $i;

    printf("<font color=blue>STEP (%s)</font><BR>n", $step);

    disp_variable ($name);
    unset_variable ($name, $flag);
    disp_variable ($name);

    printf("<BR>n");
  }
?>
============================================================

[SRC 2: unset works only throught the $GLOBALS variable]
============================================================
<?php
function unset_variable ($name, $flag)
  {
    global $$name;
    global $GLOBALS;

    if ($flag & 1)
      {
        echo "  - <font color=magenta>unset $$name</font><br>n";
        unset($$name);
      }
    if ($flag & 2)
      {
        echo "  - <font color=magenta>unset $GLOBALS["$name"]</font><br>n";
        unset($GLOBALS[$name]);
      }
  }

function disp_variable ($name)
  {
    global $$name;
    global $GLOBALS;

    printf("  - $%s : %s<BR>n",
        $name, isset($$name) ? "<font color=green>".$$name."</font>" : "<font 
color=red>(unset)</font>");
    printf("  - $GLOBALS[%s] : %s<BR>n",
        $name, isset($GLOBALS[$name]) ? "<font color=green>".$GLOBALS[$name]."</font>" 
: "<font color=red>(unset)</font>");
  }

for ($i=0; $i < 4; $i++)
  {
    $name = "var$i";
    $$name = "VALUE_$i";
    $step = $i;
    $flag = $i;

    printf("<font color=blue>STEP (%s)</font><BR>n", $step);

    disp_variable ($name);
    unset_variable ($name, $flag);
    disp_variable ($name);

    printf("<BR>n");
  }
$GLOBALS[anything];
?>
============================================================


---------------------------------------------------------------------------


Full Bug description available at: http://bugs.php.net/?id=11466


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to