练习一个简单的程序,本来应该能正常输出
Array ( [PHP] => 2 ) Array ( [PHP] => 2 [SQL] => 1 ) Array ( [PHP] => 2 [SQL] => 0 )
 
但是却输出:
Array ( [PHP] => 2 ) 
( ! ) Notice: Undefined index: SQL in D:\Program Files\VertrigoServ\www\qx.php on line 12 
Call Stack 
# Time Memory Function Location 
1 0.0012 339480 {main}( ) ..\qx.php:0 
2 0.0013 340288 Cart->add_item( ) ..\qx.php:37 
Array ( [PHP] => 2 [SQL] => 1 ) Array ( [PHP] => 2 [SQL] => 1 ) 
为什么呀???不让加入第二个元素SQL???如果都用的是PHP,就没有问题代码如下:
<html>
<head>
<title>PHP 测试</title>
</head>
<body>
<?php 
class Cart
{
var $items;
         function add_item($name,$num)
{
if($this->items[$name] == NULL)
           $this->items[$name] = $num;
else
  $this->items[$name] += $num;
}
function remove_item($name,$num)
{
if($this->items[$name] > $num)
{
$this->items[$name] -= $num;
return true;
}
else
{
return false;
}
}
}
$mycart = new Cart();
$item0_name = "PHP";
$item0_num = 2;
$mycart->add_item($item0_name,$item0_num);
print_r($mycart->items);
$item1_name = "SQL";
$item1_num = 1;
$mycart->add_item($item1_name,$item1_num);
print_r($mycart->items);
$mycart->remove_item($item1_name,$item1_num);
print_r($mycart->items);
?>
</body>
</html>

解决方案 »

  1.   

    class Cart
    {
    var $items;
      function add_item($name,$num)
    {
    if($this->items["{$name}"] == NULL)
    $this->items["{$name}"] = $num;
    else
    $this->items["{$name}"] += $num;
    }
    function remove_item($name,$num)
    {
    if($this->items["{$name}"] > $num)
    {
    $this->items["{$name}"] -= $num;
    return true;
    }
    else
    {
    return false;
    }
    }
    }
    $mycart = new Cart();
    $item0_name = "PHP";
    $item0_num = 2;
    $mycart->add_item($item0_name,$item0_num);
    print_r($mycart->items);
    $item1_name = "SQL";
    $item1_num = 1;
    $mycart->add_item($item1_name,$item1_num);
    print_r($mycart->items);
    $mycart->remove_item($item1_name,$item1_num);
    print_r($mycart->items);
      

  2.   

    我改了,还是不行呀,还是那个错误,为什么?我用的是VertrigoServ。难道会是这个吗?<html>
    <head>
    <title>PHP 测试</title>
    </head>
    <body>
    <?php 
    class Cart
    {
    var $items;
             function add_item($name,$num)
    {
    if($this->items["{$name}"] == NULL)
               $this->items["{$name}"] = $num;
    else
      $this->items["{$name}"] += $num;
    }
    function remove_item($name,$num)
    {
    if($this->items["{$name}"] > $num)
    {
    $this->items["{$name}"] -= $num;
    return true;
    }
    else
    {
    return false;
    }
    }
    }
    $mycart = new Cart();
    $item0_name = "PHP";
    $item0_num = 2;
    $mycart->add_item($item0_name,$item0_num);
    print_r($mycart->items);
    $item1_name = "SQL";
    $item1_num = 1;
    $mycart->add_item($item1_name,$item1_num);
    print_r($mycart->items);
    $mycart->remove_item($item1_name,$item1_num);
    print_r($mycart->items);
    ?>
    </body>
    </html>
      

  3.   

    我改了,还是不行呀,还是那个错误,为什么?我用的是VertrigoServ。难道会是这个吗?<html>
    <head>
    <title>PHP 测试</title>
    </head>
    <body>
    <?php 
    class Cart
    {
    var $items;
             function add_item($name,$num)
    {
    if($this->items["{$name}"] == NULL)
               $this->items["{$name}"] = $num;
    else
      $this->items["{$name}"] += $num;
    }
    function remove_item($name,$num)
    {
    if($this->items["{$name}"] > $num)
    {
    $this->items["{$name}"] -= $num;
    return true;
    }
    else
    {
    return false;
    }
    }
    }
    $mycart = new Cart();
    $item0_name = "PHP";
    $item0_num = 2;
    $mycart->add_item($item0_name,$item0_num);
    print_r($mycart->items);
    $item1_name = "SQL";
    $item1_num = 1;
    $mycart->add_item($item1_name,$item1_num);
    print_r($mycart->items);
    $mycart->remove_item($item1_name,$item1_num);
    print_r($mycart->items);
    ?>
    </body>
    </html>
      

  4.   

    跟PHP环境应该是没关系的,而且在线测试了一下(http://writecodeonline.com/php/),没报错,真是奇怪了。
      

  5.   

    报错是对的 但只是notice级别 
      

  6.   

    原因在于
    if($this->items[$name] == NULL)$this->items[$name] 第一次不存在自动创建了
    $this->items[$name]  $name = "SQL" 时 $this->items 数组是存在的,但$this->items['SQL'] 在执行的时候是不存在用!isset($this->items[$name]) 把它替换掉
      

  7.   

    楼上说的对了,谢谢你们俩了。还有一个问题就是,如果是notice警告,我能不能把它屏蔽掉?下面是改正后正确的代码:<html>
    <head>
    <title>PHP 测试</title>
    </head>
    <body>
    <?php 
    class Cart
    {
    var $items;
      function add_item($name,$num)
    {
    if(!isset($this->items[$name])) 
        $this->items[$name] = $num;
    else
      $this->items[$name] += $num;
    }
    function remove_item($name,$num)
    {
    if($this->items[$name] >= $num)
    {
    $this->items[$name] -= $num;
    return true;
    }
    else
    {
    return false;
    }
    }
    }
    $mycart = new Cart();
    $item0_name = "PHP";
    $item0_num = 2;
    $mycart->add_item($item0_name,$item0_num);
    print_r($mycart->items);
    $item1_name = "SQL";
    $item1_num = 1;
    $mycart->add_item($item1_name,$item1_num);
    print_r($mycart->items);
    $mycart->remove_item($item1_name,$item1_num);
    print_r($mycart->items);
    ?>
    </body>
    </html>
      

  8.   

    php.ini
    error_reporting = E_ALL & ~E_NOTICE