Had an interesting experience this evening. Was writting a public method in my Error class to clear all Error Messages. Originally I was using unset(self::$array[$elementIndex]); but the result did not turn out as expected, the data remained in the array even though it was referencing the private variable.
To solve the problem, I have now switched it to: self::$array[$elementIndex] = null; and this seems to work every time. This just goes to show, how the function can vary depending on where and what type you are trying to destroy.