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

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

4

3 回答 3

1

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

于 2013-02-13T06:13:37.970 回答
0

您的 historyArray 是静态的。尝试,

array_push(self::$historyArray,$query);
于 2013-02-13T06:09:47.223 回答
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);
      }
     }  
于 2013-02-13T06:13:13.513 回答