阵列推送不起作用

时间:2013-02-13 06:07:11

标签: php

我已按以下方式创建了一个类

 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);
      }
     }  

现在我已经创建了一个类History的对象作为h,然后我用2个不同的参数调用函数writeToHistory()两次我想知道array_push()不工作导致第二次调用函数的时间查询应该写在数组的1索引中,但实际上数组的第一个元素正在被替换。任何想法为什么?

3 个答案:

答案 0 :(得分:1)

是的,@ shashshifter是对的。它是静态的。

你甚至可以做到

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的注释);

答案 1 :(得分:0)

您的historyArray是静态的。尝试,

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

答案 2 :(得分:0)

为什么在构造函数中将historyArray声明为数组?
此外,功能在哪里?''你班上定义的?如果它没有定义,那可能会给你带来麻烦...... getCacheFileName();

并且,请举例说明您传递给writeToHistory函数的内容' $ query'变量,以便我们可以轻松地模式查看最新情况

将您的代码更改为以下内容:

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);
      }
     }