Nemohu si pomoct, pri pohledu na slovni spojeni "moderni PHP" se mi hned vybavil tento obrazek:
https://i.pinimg.com/736x/cc/33/ee/cc33ee8fee212b5a140d6a233e5d6e6b.jpg
Ano, to je bohužel častý náhled na PHP. Máme v kanceláři tenhle obrázek i na zdi :-) Problém ovšem není v programovacím jazyku, ale s kvalitou vývojářů, kteří kód produkují. Do PHP je velmi snadné nastoupit a proto, dle mého názoru, komunita zahrnuje více nováčků než u jiných jazyků.
v tom odkazu na githubu
https://github.com/intraworlds/workshop-php
se píše. "Řádek po řádku bude aplikovat uživatelské filtry a dekorátory."
No nevím, pokud mi něco neuniklo, tak ta implementace ve starém php rozhodně nedělá
1. "......který přečte libovolně dlouhý textový soubor." (třeba 20TB by asi moc nenačetl do stringu, rozhodně ne na menší ramce nebo disku ...) a ani 2. "Upravte program tak, aby vypisoval průběžný stav nekonečného streamu." což spolu ve finále dost souvisí (průběžní načítání)
Nevím přesně, zatím jsem to nepoužil, ale vypadá to že bude stačit když implementuje http://php.net/manual/en/class.iterator.php.
Každopdáně na čtení neznámo jak velkého datového objemu obecně nemůžeš použít něco, co ti to hned vrátí jako kompletně načtený celek, ale nějaký handle nebo stream, který je schopen ti to dávkovat po částech v nějaké smičce třeba. Zde v php asi fopen či stream get contents a to celé bys mohl obalit tídou která implementuje ten Iterátor (odkaz výše) a buď dědí jako adaptér, nebo obsahuje nějaké adaptéry a užije je jako strategy nebo chain of .... fantazii se meze nekladou ....
myslel jsem něco, co čte řádky pomocí fgets, ale dá se nad tím iterovat. Něco jako getLinesFromFile z této stránky
http://php.net/manual/en/language.generators.comparison.php , ale součást standardní knihovny.
Naimplementovat takovou vec zabere priblizne 30 vterin... https://github.com/simon-ondrej/universal-parser/blob/master/src/UniversalParser/StreamReaders/FileStream.php
Sekvencni nacteni souboru do pameti je uplne ta nejmensi cast toho ukolu, ktery mas vypracovat. A v rozsahu zadani je naprosto irelevantni. Tvoje prohlaseni je podobne, jako bys napsal, ze volanim funkce fopen delas Copy&Paste z internetu, protoze se to prime zavolani da najit na internetu.
Cilem ukolu nebylo zjistit, jak sekvencne nacist soubor (jak pises, takovou vec si zvladne najit pomoci Google snad naprosto kazdy vyvojar). Cilem bylo procvicit si objektove orientovany navrh, jak spravne navrhnout abstrakcni vrstvy, jak je mezi sebe zakomponovat a tim ziskat modularni, uzivatelsky upravitelny a konfigurovatelny parser, ktery ti umozni specifikovat uzivatelske filtry pro konkretni radek nacteneho souboru a rovnez procesy, ktere prave zpracovavany radek urcitym zpusobem zformatuji (napr. jak je videt na prikladu ze radku vyextrahuji uroven zalogovane zpravy).
Prosim te, co to je za prohlaseni? :D JavaScript zacal byt konecne popularni a nejak pouzitelnej diky ES6, ktery prinesl tridy, a take v tom lidi zacali psat slozitejsi aplikace diky, a ted se drz, objektove orientovanemu jazyku vychazejicimu z C#, TypeScriptu.
Stejne tak spousta dalsich nejrozsirenejsich jazyku je zalozena na OO paradigmatu s pripadnym presahem do funkcionalniho programovani (at je to Java nebo Kotlin nad JVM, C# nad .NETem nebo prave treba PHP).
To je jako bych ja rekl, ze Python je tak v prdeli kvuli tomu, ze v tom vetsina lidi pise spagety a pouziva necitelne nazvy promennych. :D Kazde prostredi je jine. :)
v pythonu je to napsané za 3 minuty.
from funcy import count_by
from fileinput import input
for i in count_by(r'test.(\w+)', input()).items():
print('%s: %d' % i)
chtěl bych vidět řešení od minusovačů prvního příspěvku. PHP se podle mě od verze 4 vydalo špatným směrem. Místo na praktičnost se zaměřilo na imitaci Javy.