$_SESSION['cart'][] = array($this->posRef => $this->posTitle);
What this actually says is to take the array being created ($this->posRef => $this->posTitle) and add it as a new element to the $_SESSION['card'] array, using the next available numeric index.
Assuming you want to add/update the $_SESSION['card'] value as a brand new array with the values specified every time this function is called then you could just remove the empty square brackets, like this:
$_SESSION['cart'] = array($this->posRef => $this->posTitle);
Somehow I think it more likely you want to add a new value to the existing array each time around, with a specific index. If so, try this instead:
$_SESSION['cart'][$this->posRef] = $this->posTitle;