2013-02-13 91 views
-1

我創建了一個類以下方式陣推不工作

class History 
    { 
     private $historyArray; 
     private $cacheFileNameArray=array(); 
     public function __construct() 
     { 
     $this->historyArray=array(); 
     } 
     public function writeToHistory($query) 
     { 
     $cacheFileName=$this->getCacheFileName(); 
     $query=$query.chr(219)."1".chr(219).$cacheFileName; 
     array_push($this->historyArray,$query); 
     print_r($this->historyArray); 
     } 
    } 

現在我已經創造了歷史類的一個對象小時,然後我打電話的功能writeToHistory()兩次有2個不同的參數由我想知道array_push()不工作原因在第二次調用該函數的時候查詢應該寫入數組的第一個索引,但實際上數組的第一個元素被替換。任何想法爲什麼?

+1

[無法重現](http://codepad.viper-7.com/7sEild)。 – 2013-02-13 06:12:35

+0

您發佈的代碼按預期工作,所以問題在於其他地方。 – 2013-02-13 06:27:26

回答

0

您的歷史數組是靜態的。嘗試,

array_push(self::$historyArray,$query); 
+0

您是否在代碼中的任何位置看到過「static」這個詞? – 2013-02-13 06:12:53

+0

在這種情況下,作爲print_r語句 – 2013-02-13 06:13:26

+0

@Jack的結果正在顯示一個空數組@Jack他的功勞,最初靜態在代碼中,但問題被編輯 – Tucker 2013-02-13 06:13:49

0

爲什麼要在構造函數中聲明historyArray作爲數組?
另外,你的班級中定義的函數「'在哪裏?如果它沒有定義,這可能會導致你麻煩... getCacheFileName();

,並給予我們要傳遞到您的writeToHistory功能「$查詢」變量是什麼的一個例子,使我們可以模式不難看出怎麼回事,請

更改您的代碼如下:

class History 
    { 
     private $historyArray = array(); 
     private $cacheFileNameArray= array(); 
     public function __construct() 
     { 

     } 
     public function writeToHistory($query) 
     { 
     $cacheFileName=$this->getCacheFileName(); 
     $query=$query.chr(219)."1".chr(219).$cacheFileName; 
     array_push($this->historyArray,$query); 
     print_r($this->historyArray); 
     } 
    } 
+0

我didnot這個代碼部分在這裏足夠大的類覆蓋整個頁面。但我確定了問題部分,所以我發佈該部分只有 – 2013-02-13 06:16:30

+0

我試圖與2查詢程序1>「從table1選擇名稱」 ,2>從table1中選擇id – 2013-02-13 06:19:28

0

是的@shapeshifter是正確的。它是靜態的。

你甚至可以做

array_push(History->$historyArray, $query); 

array_push(self::$historyArray, $query); 

History->$historyArray[] = $query; 

PHP手冊上說「如果你使用array_push()將一個元素添加到陣列中它的更好使用$ array [] =因爲這樣就沒有調用函數的開銷。「 (來自http://php.net/manual/en/function.array-push.php的註釋);