Nie widzę za bardzo problemu.
No i to trochę problem, że tak bezkrytycznie patrzysz na to.
Już nie mówiąc o tym, że skoro dereferencja zmiennej bez dolara miałaby działać, np value = 4; echo value;
, to musiałoby to znaczyć że miałoby się dać wywołać funkcje np (value)()
nawet bez dolara.
Nie widzę za bardzo problemu. Tak naprawdę php reaguje na "wywołanie" stringa, więc obecnie działa też:
"array_values"();
nie trzeba żadnych dolarów, nie widzę dodatkowych problemów z usunięciem ich tutaj.
Nie odpowiadasz na mój argument.
W moim poście chodziło o to że:
- call
"array_values"()
oraz ("array_values")()
da ten sam wynik (wywołanie funkcji array_values()
, i to jest w porządku.
- Dla propozycji autora wątku - czyli zmiennej bez dolara, call
(value)()
da inny wynik niż value()
, i to już jest nie okej i nie intuicyjne. Pierwszy wywoła funkcję o nazwie która siedzi w zmiennej value
, drugi wywoła funkcję value()
. To miałem na myśli w moim poście że to jest zły pomysł. Dlatego aktualnie w PHP istnieją dwa osobne zapisy $value()
oraz value()
. I $value()
działa tak samo jak ($value)()
.
Są inne powody czemu to nie mogłoby działać, chociażby dlatego że jak dereferencujesz zapis bez $
, np echo value;
, to PHP szuka stałej o nazwie value
...
Dolar $
miał właśnie znaczyć że coś jest zmienne, więc jeśli chciałbyś wywalić $
to musiałbyś albo wywalić stałe, albo znaleźć jakąś inną notacje dla stałych.
Nie widzę powodu czemu stałe miałyby być traktowane osobno. W innych językach nie ma zazwyczaj rozróżnienia w korzystaniu ze stałych / zmiennych i można je nazywać i używać w ten sam sposób. Jedyna różnica która powinna być to taka że do stałych nie można nic przypisać. Skoro php już obsługuje stałe bez dolara to nie powinno być większego problemu z rozszerzeniem tego na zmienne.
I jak miałoby to działać konkretnie?
value = 2;
define('value', 3);
Zmienna nadpisana przez stałą? Super pomysł.
Poza tym, królicza nora biegnie dalej, bo nawet jeśli to miałoby tak działać, to w PHP jest mechanizm taki, że nie możesz użyć zmiennej która nie istnieje, ale możesz użyć stałej która nie istnieje - i w momencie w którym użyjesz stałej która nie istnieje, to PHP zwraca nazwę tej stałej, np:
<?php
echo missing_constant; // "missing_constant"
Więc wtedy, gdybyś używał zmiennej która nie istnieje, np
<?php
a = 2;
echo b; // to by zwróciło "b"
I znowu, znaczy to że albo zmienne muszą mieć $
, albo handling stałych w PHP trzeba by zmienić.
To miałem na myśli dwa posty temu, że powiedziałem że usunięcie $
ciągnie za sobą tyle konsekwencji, że praktycznie musiałbyś mieć nowy język. Przy czym zaznaczam : da się mieć język w którym zmienne dereferencuje się bez dolara - przecież każdy inny język oprócz PHP taki jest :D Ale to nie jest taka "prosta" zmiana, jak po prostu zabranie dolara, tylko cały język praktycznie wtedy pada.
Cała składnia PHP jest zaprojektowawna dookoła tych dolarów.