-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として作成しました。次に、関数writeToHistory()を2つの異なる引数で2回呼び出しています。これにより、関数の2回目の呼び出し時にarray_push()が機能していないのではないかと思います。配列の1つのインデックスに書き込まれますが、実際には配列の最初の要素が置き換えられています。

4

3 に答える 3

1

はい、@shapeshifter は正しいです。それは静的です。

あなたもできる

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

また

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

また

History->$historyArray[] = $query;

PHP のマニュアルには、「array_push() を使用して配列に要素を 1 つ追加する場合は、$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 に答える