我已按以下方式创建了一个类
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索引中,但实际上数组的第一个元素正在被替换。任何想法为什么?
答案 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);
}
}