2013-04-23 2 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_data. empty($this->_data) должен вернуть false, но результатом теста является int(0). Я озадачен.Почему не пуст (0) возвращает false?

+3

Я не вижу, как это может быть правдой. http://php.net/manual/en/function.empty.php говорит, что пустой возвращает bool, а не int. – Patashu

+0

@Patashu Я не думаю, что он на самом деле допрашивает функцию php, но функция, которую он использует вместе с пустым() renrenshang Я думаю, что это причина, по которой остальная часть функции работает после попытки сделать остальную часть кода внутри else statment – Breezer

+0

Попробуйте 'var_dump ($ это -> _ данные) '. – Raptor

ответ

0

$ this -> _ данные в вашем коде - это массив.

Заменить строку с этим (для оценки пройденного нулевого значения):

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

большое спасибо! – renrenshang

Смежные вопросы