Hallo MB,
uppala, dieses Detail hatte ich total übersehen. Das erklärt zumindest mal, warum Du $_storage nicht über parent::__construct befüllst.
Es ist aber eine Unsauberkeit. PHP verzeiht Dir hier einen Fehler, den Du nicht machen solltest.
Ein Miniprogramm zur Demonstration:
<?php
var_dump($a);
$a[] = 7;
echo "---\n";
var_dump($a);
Ausgaben:
<b>Notice</b>: Undefined variable: a in <b>[...][...]</b> on line <b>3</b>
NULL
---
array(1) {
[0]=>
int(7)
}
Die Notice ignorieren wir mal, das ist bei einem private nicht so, aber der Wert darin ist interessant: NULL. PHP erlaubt Dir, den [] (Array Append) Operator auf NULL anzuwenden und wandelt den Inhalt von $a stillschweigend in ein Array um.
Das ist typisch PHP, gemacht für Leute, die sich ihre Webseiten aus diversen Vorlagen zusammenkopieren und keine Ahnung vom Programmieren haben (was eine Breitseite gegen PHP ist, NICHT gegen Dich!). Es ist vor allem extrem unsauber.
PHP hat seit Version 4 viele Unsauberkeiten deprecated und irgendwann entfernt. Möglicherweise passiert das auch hier einmal. Du solltest eine Variable, die Du als Array nutzen willst, DEFINITIV mit einem leeren Array initialisieren.
So ist's sauberer:
class Foo
{
private $_storage = [];
public function __construct($bar)
{
$this->_storage[] = $bar;
}
}
Diese Form der Initialisierung eignet sich vor allem für Traits, weil die keine Konstruktoren kennen. Initializer laufen vor dem Konstruktor.
Rolf
sumpsi - posui - obstruxi