2013-04-23 214 views
-3
<?php 
class Stack{ 
private $_data = array(); 
private $_end = null; 
public function push($data){ 
    if($this->_end === null){ 
     $this->_end = 0; 
    }else{ 
     $this->_end = $this->_end + 1; 
    } 
    $this->_data[$this->_end] = $data; 
} 

public function pop(){ 
    if(empty($this->_data)){ 
     return false; 
    } 

    $ret = $this->_data[$this->_end]; 

    array_splice($this->_data, $this->_end); 
    $this->_end--; 

    return $ret; 
} 

public function getData(){ 
    return $this->_data; 
} 
} 

// test 
$stack = new Stack(); 
$stack->push(0); 
$pop_data = $stack->pop(); 
var_dump($pop_data, $stack->getData()); 

为什么不empty(0)返回false?我将0推到pop_dataempty($this->_data)应返回false,但测试结果为int(0)。我感到困惑。为什么不为空(0)返回false?

+3

我看不出这是对的。 http://php.net/manual/en/function.empty.php说,空返回一个布尔,而不是一个int。 – Patashu 2013-04-23 03:04:15

+0

@Patashu我不认为他实际上质疑php函数,但他与空()renrenshang一起使用的函数我认为这是因为尝试使其他语句中的代码的其余部分后运行的功能的其余部分 – Breezer 2013-04-23 03:07:32

+0

尝试'var_dump($此 - > _数据)'。 – Raptor 2013-04-23 03:08:24

回答

0

$ this - > _你的代码中的数据是一个数组。

替换这个(评估传递零值),您的线路:

$this->_data[$this->_end]; 
+0

非常感谢你! – renrenshang 2013-04-24 02:10:04

相关问题