PHP v tom zďaleka nie je samo, viď. napríklad
https://www.destroyallsoftware.com/talks/wat
Navyše ide o neaktuálnu výhradu, keďže tento problém je už v PHP vyriešený, viď.
https://www.php.net/manual/en/migration74.deprecated.php
Náhradou je (a vždy bolo) použiť zátvorky, nespoliehať na to, či je to defaultne asociatívne sprava alebo zľava, ale vyjadriť očakávané vyhodnocovanie explicitnými zátvorkami.
PHP 7.4 spravilo bezzátvorkový zápis deprecated, od PHP 8.0 to bude error.
Teoreticky o X verzií neskôr by sa mohol znova povoliť bezzátvorkový zápis s obrátenou asociatívnosťou, ale to je už fakt len mikro detail, pretože písať to so zátvorkami naozaj žiaden veľký problém nie je, zvlášť keď si vezmeme, že reťazenie ternary operátorov naozaj nie je konštrukcia ktorá by sa často používala (ani si nepamätám, kedy som to naposledy použil).
Problémom bolo, že takýto zápis v minulosti mohol byť zle chápaný pri prechádzaní medzi rôznymi jazykmi a toto už dnes nehrozí.
Obligatorní odkaz: PHP: a fractal of bad design (myslím, že nikde jinde to není tak hezky shrnuté).
Ano, arrays jsou velmi vypečená. Hádanka: co vypíše nálsedující program?
$a = []; $a[2] = "treti"; $a[1] = "druhy"; $a[0] = "prvni"; foreach ($a as $x) { echo "$x\n"; }
Ještě by možná s přivřenýma očima mohlo dávat smysl používat jeden datový typ pro seznamy a slovníky. Ale používat stejný datový typ pro seznamy a uspořádané slovníky, to prostě v principu nemůže fungovat.
9. 6. 2020, 17:14 editováno autorem komentáře
Áno majú to veľmi krásne popísané, preto som ten odkaz sem tiež dal... Ohľadom arrayov by som povedal že toto je ešte ich "menší" problém. Ono celkovo je to na hlavu a myslím že nemá zmysel to ani popisovať, v tom linku je väčšina toho zhrnutá. To ešte PHP funkcie na prácu s arraymi a pod je to väčšie peklo. No, inak by ma zaujímalo či funguje v PHP aspoň niečo ako
`$a = nejakamojafunkcia() || "defaultna hodnota";` lebo čo si pamätám ani toto nebolo/není možné.
9. 6. 2020, 17:57 editováno autorem komentáře
Ten odkaz je už takmer 10 rokov starý a veľká časť z tam uvedených výhrad dnes už neplatí, keďže PHP sa stále vyvíja.
Čo sa týka array, tak jeho flexibilita je daná dobou vzniku a pre rýchle prototypovanie je skôr prínosom ako brzdou.
Každopádne ale, viac ako 10 rokov existuje ArrayAccess interface pomocou ktorého si každý môže spraviť vlastnú implementáciu triedy/typu s presnou biznis logikou akú potrebuje a používať ju miesto array.
Alebo použiť niečo takéto napríklad:
https://www.php.net/manual/en/book.ds.php