@viking No wlasnie nie. Przyklad co teraz podales rzuca bledem dopiero od php7. We wczesniejszych wersjach bylo to dozwolone i dawalo nieoczekiwane efetky co nie raz to na forum byla widac jak userzy wpadali i plakali.
Wiec dopiero w wersji php7 poszli po rozum do glowy i juz nie pozwalaja na takie cuda gdy zmienna wczesniej byla tekstem. Mogli jednak od razu posunac sie dalej i wymusic inicjalizowania tej zmiennej.
http://php.net/manual/en/language.types.array.phpCytat
$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type
If $arr doesn't exist yet, it will be created, so this is also an alternative way to create an array. This practice is however discouraged because if $arr already contains some value (e.g. string from request variable) then this value will stay in the place and [] may actually stand for string access operator. It is always better to initialize a variable by a direct assignment.
Note: As of PHP 7.1.0, applying the empty index operator on a string throws a fatal error. Formerly, the string was silently converted to an array.
Cytat
Ale jest różnica i chociaż też nie lubię niekonsekwencji to akurat to jest logiczne. Ten zapis wyżej mógłby powodować bardzo dużo nieprzewidywalnych błędów (np zapominasz include gdzie $zm jest obiektem). Czym by to miało być? Stringiem domyślnie i dlaczego?
To samo dotyczy tekstow. Robisz $zm = ''; na zmiennej, ktora wczesniej byla obiektem bo zapomniales o jakim tam include