Zadejte hledaný výraz...

Simulátor příkazového řádku v PHP

Repox
verified
rating uzivatele
31. 5. 2014 11:34:45
Dobrý den všem,
rád bych věděl vaše názory na určitý způsob programování, který jsem začal používat a který mě doslova uchvátil. Ocenil bych spíše nevýhody, které vás napadají případně problémy, které by mohly nastat například při programování složitějších projektů. Já svůj názor už mám, ale protože víc hlav víc ví, potřebuji vědět i názor jiných a nejlépe zkušených programátorů.
O co jde konkrétněji.
Jistě jste už někdy používali terminál případně příkazovou řádku ve Win a přesně tenhle princip (zadávání příkazů) jsem použil pro programování svých projektů. Ve výsledku mi příjde programování daleko efektivnější a rychlejší, počet syntaktických chyb při psaní kódu jsem snížil takřka na nulu nemluvě o bezpečnosti a přehlednosti.
A prakticky.
Vytvořil jsem si třídu s metodou "Term", která jako parametr příjmá příkazy podobně jako je tomu v Linuxovém terminálu. Příkazy se samozřejmě dají snadno rozšiřovat a umožňují použití dalších voleb. Ve výsledku vůbec nemusím řešit názvy proměnných a tříd, prostě se nemusím vůbec starat co je "na pozadí". Napíšu příkaz a už nemám důvod starat se o X dalších věcí při klasickém programování.
// inicializace terminálu
require dirname(__FILE__).'/Terminal.php';
$php = new Terminal;
// ukázka získání obsahu souboru
$php->Term('file get ./soubor.txt');
// ukázka připsání textu do souboru
$php->Term("file append $text");
// ukázka smazání souboru
$php->Term('file delete ./soubor.txt');
// ukazka připojení k databázi
$php->Term("db connect $access_data");
// ukázka provedení SQL dotazu
$php->Term("db query $sql");
Celé kouzlo je v tom, že první přikaz je vždy název třídy, druhý příkaz je název metody v této třídě a třetí příkaz jsou parametry metody. Můžu si snadno vytvořit další "rozšíření" tohoto terminálu o jiné funkce. Chci pracovat s obrázky? Tak si vytvořím třídu např. Img s metodami pro zmenšení, kompresi a podobně. A pak už můžu jen kdekoliv a kdykoliv používat:
$php->Term('img compress ./background.png');
$php->Term('img resize 200 200 ./background.png');
Terminál i s celou "databází" příkazů a všech funkcí můžu snadno přenést do jiného projektu, takže 100% odpadá vymýšlení kola. Odchytávání chyb je taky úplně o něčem jiném. V případě chybně zadaného příkazu dostanu místo mnohdy nic neříkající chybové zprávy kompletní informaci o tom co a kde je špatně a jak má příkaz správně vypadat i s příklady použití tak jak je tomu v Linuxovém terminálu. Pokud vám to bude málo, můžete si terminál rozšířit o debuger na způsob laděnky v Nette. V podstatě jde tedy o takový "wrapper" nad vším, který má za úkol maximálně zjednodušit psaní kódu.
Rád bych slyšel vaše názory, proč ano, proč ne a podobně. Momentálně mám Terminál ve fázi "skoro alfa" takže jej nemůžu nabídnout k vyzkoušení, jde mi spíše o polemiku nad tímto způsobem psaní kódu v aplikacích před tím, než se tomu začnu více věnovat a než Terminál zvěřejním. Děkuji.
31. 5. 2014 11:34:45
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028237
Jan Kuthan
verified
rating uzivatele
(48 hodnocení)
31. 5. 2014 11:52:01
Možná jsem natvrdlej, ale v čem je to jiné od jiných frameworků?
31. 5. 2014 11:52:01
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028236
Repox
verified
rating uzivatele
31. 5. 2014 12:02:11
Napsal kdosiodjinud;1093670
Možná jsem natvrdlej, ale v čem je to jiné od jiných frameworků?
To není o frameworku, to je o způsobu psaní kódu. Ano každý framework má hromadu připravených funkcí aby se nemuseli vymýšlet znova nové, ale o tom tohle není. Tohle je o tom proč nemusím půl hodiny hledat způsob a možnosti použití nějaké knihovy, o tom proč nemusím psát pět řádků kódu ale stačí mi jeden nebo dva. Například Codeigniter, pokud použiji nějakou svou třídu z "library" v controlleru musím ji prvně inicializovat přes loader potom volám metody podle toho chci a ještě ošetřuji případné chyby. A když ji později budu chtít použít v jiném controlleru? Bud ji musím hodit do autoloaderu nebo si to celé zopakovat. S Terminálem tohle vůbec nemusím řešit. Zadám příkaz a on udělá to co po něm chci.
31. 5. 2014 12:02:11
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028235
Fido123
verified
rating uzivatele
(13 hodnocení)
31. 5. 2014 12:40:24
Já jsem asi taky natvrdlý. K čemu to proboha je? Jak asi do tohohle
dostaneš inteligentní dopňování kódu? To budeš mít někde vedle počítače papírek s nápovědou?
---------- Příspěvek doplněn 31.05.2014 v 12:42 ----------
A že jinde musíš ošetřovat chyby? To jako když je nebudeš muset oštřovat, tak tam nebudou?
31. 5. 2014 12:40:24
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028234
Repox
verified
rating uzivatele
31. 5. 2014 13:05:55
Napsal Fido123;1093694
Já jsem asi taky natvrdlý. K čemu to proboha je? Jak asi do tohohle
dostaneš inteligentní dopňování kódu? To budeš mít někde vedle počítače papírek s nápovědou?
A proč bych měl kvůli jednomu řádku kódu potřebovat inteligentní doplňování kódu?
To už jsou všichni programátoři tak zdegenerování nejrůznějšími inteligentními pomůckami, že neumí použít vlastní inteligenci?
Vím, že pro práci s obrázky se třída jmenuje Img, vím že metoda pro změnu rozměrů se jmenuje resize tak prostě napíšu img resize. Na co potřebujete doplňování kódu?
Co se týče chyb, tak je opravdu ošetřovat nepotřebuji, teda ne tak jak jste patrně zvyklí... Absolutně mně nezajímá jak který příkaz funguje, pokud chci obsah souboru tak si o něj jedním příkazem požádám a třída která tohle má na starost se už prostě o získání obsahu postará, bud jej dostanu nebo nedostanu nic. Pokud nedostanu požadovaný obsah tak se podle toho zařídím dále.
O tom, že případné chyby se zcela automaticky mohou ukládat do logu nebo odesílat na email nemluvě. Tohle je prostě vlastnost terminálu. Nemusím psát vůbec žádný další kód nebo používat nějaké knihovny pro logování. Prostě jen zadám příkaz na jeden řádek.
Vše je prostě jen o ulehčení práce. To že terminál může automaticky výsledky všech nebo jen konkrétních příkazů ukládat do cache radši ani nezmiňuji (výsledná data metod se ukládají aby se opětovné zavolání metody nemuselo znovu provádět), protože mi určitě odpovíte na co máme Xcache a podobné :)
31. 5. 2014 13:05:55
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028233
To je příšerný nápad, který se rozpadne u jakéhokoliv složitějšího kódu, jakmile začnete skládat objekty.
  • Ztrácíte možnost napovídání v IDE
  • Hůř se to čte
  • Nevíte, jaká má být návratová hodnota nebo výjimka
  • Špatně se vám pracuje s namespaces
  • Jak oddělíte volání statické a instanční?
  • Neumožňuje to fluidní interface...
Vpodstatě jste jen obalil call_user_func_array()
/**
* A glorified wrapper for call_user_func_array()
* @author Retal
*/
class Terminal {
/**
* Call whatever you tell me, space-separated.
*
* @param string $chaos Everything in one string
* @return mixed Anything. We don't know
* @throws Exception Anything, anytime. We don't know
*/
public function term( $chaos ) {
$params = explode(' ', $chaos );
$class = array_shift( $chaos );
$method = array_shift( $chaos );
$call = ;
return call_user_func_array( $call, $params );
}
}
Pokud chcete opravdu používat příkazový řádek, vyjděte raději třeba z tohoto:
The Console Component (current) - Symfony
31. 5. 2014 13:09:07
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028232
Fido123
verified
rating uzivatele
(13 hodnocení)
31. 5. 2014 13:29:12
Napsal Repox;1093702
A proč bych měl kvůli jednomu řádku kódu potřebovat inteligentní doplňování kódu?
To už jsou všichni programátoři tak zdegenerování nejrůznějšími inteligentními pomůckami, že neumí použít vlastní inteligenci?
Vím, že pro práci s obrázky se třída jmenuje Img, vím že metoda pro změnu rozměrů se jmenuje resize tak prostě napíšu img resize. Na co potřebujete doplňování kódu?
Co má společného inteligence programátoru s potřebou zapamatovat si dvacet přetížení jedné metody?
Napsal Repox;1093702
Co se týče chyb, tak je opravdu ošetřovat nepotřebuji, teda ne tak jak jste patrně zvyklí... Absolutně mně nezajímá jak který příkaz funguje, pokud chci obsah souboru tak si o něj jedním příkazem požádám a třída která tohle má na starost se už prostě o získání obsahu postará, bud jej dostanu nebo nedostanu nic. Pokud nedostanu požadovaný obsah tak se podle toho zařídím dále.
Heh jistě. Na určité úrovni tak jistě „programovat“ lze, vrátíme když tak prázdný řetězec, on už si to užvatel nějak přebere.
Napsal Repox;1093702
Vše je prostě jen o ulehčení práce.
Je to všehno, jenom tohle ne.
31. 5. 2014 13:29:12
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028231
Repox
verified
rating uzivatele
31. 5. 2014 13:36:31
Napsal Martin Schlemmer;1093704
To je příšerný nápad, který se rozpadne u jakéhokoliv složitějšího kódu, jakmile začnete skládat objekty.
  • Ztrácíte možnost napovídání v IDE
  • Hůř se to čte
  • Nevíte, jaká má být návratová hodnota nebo výjimka
  • Špatně se vám pracuje s namespaces
  • Jak oddělíte volání statické a instanční?
  • Neumožňuje to fluidní interface ...
Vpodstatě jste jen obalil call_user_func_array()
/**
* A glorified wrapper for call_user_func_array()
* @author Retal
*/
class Terminal {
/**
* Call whatever you tell me, space-separated.
*
* @param string $chaos Everything in one string
* @return mixed Anything. We don't know
* @throws Exception Anything, anytime. We don't know
*/
public function term( $chaos ) {
$params = explode(' ', $chaos );
$class = array_shift( $chaos );
$method = array_shift( $chaos );
$call = ;
return call_user_func_array( $call, $params );
}
}
Pokud chcete opravdu používat příkazový řádek, vyjděte raději třeba z tohoto:
The Console Component (current) - Symfony
Jak jsem psal napovídání v IDE není potřeba, je třeba jen vědět jaké příkazy mohu použít. Každý linuxák co někdy použil terminál asi rozumí tomu o čem píšu. Pokud nevím jak který příkaz v terminálu v Linuxu funguje (který třeba já používám denodenně) jednoduše použije man a přečte si to. Ekvivalent u tohoto mého terminálu je příkaz "terminal help" který zobrazí v debug okně seznam všech možných příkazů. Pokud použiji "terminal help nazev_prikazu" zobrazí se možnosti a příkazy použití.
Čte se na tom jednom řádku hůř co? Mě například příjde čitelnější jeden řádek pro získání obsahu souboru přes curl než 6 řádků klasickým zápisem. Příkladu mám kopu, klidně se ptejte.
Návratové hodnoty jsou si myslím logicky naprosto jasné, "view" v příkazu data zobrazí, "get" data vrátí, u příkazů které mají provádět nějakou akci (img resize, zip unpack cache enable) je vždy výsledek true nebo false.
Nad namespaces jsem zatím nepřemýšlel, ale vzhledem k principu fungování jsou mi zatím ukradené.
A zbytek je mimo mísu, protože jste zatím nepochopili smysl. Tohle není framework pro tvorbu aplikací, nemá za vás řešit aplikační návrhy, routování a já nevím co ještě. Je to prostě obal nad daleko složitějšími procedurami, který slouží jen k tomu abych byl rychlejší a efektivnější. V podstatě to s tím call_user_func_array je pravda, jen s tím rozdílem, že je za tím mnohem víc. Ale chápu že bez vyzkoušení to není ono.
---------- Příspěvek doplněn 31.05.2014 v 13:41 ----------
Napsal Fido123;1093712
Co má společného inteligence programátoru s potřebou zapamatovat si dvacet přetížení jedné metody?
Heh jistě. Na určité úrovni tak jistě „programovat“ lze, vrátíme když tak prázdný řetězec, on už si to užvatel nějak přebere.
Je to všehno, jenom tohle ne.
Nic takového není třeba a já to nikde nepsal. Člověk co používá terminál v Linuxu si taky musí pamatovat všechny (tisíce) příkazy? Ne. Musí používat napovídání v terminálu? Ne. A přesto je s terminálem daleko efektivnější než kdokoliv jiný.
Opět jsem nic takového nepsal, když nedostanu požadovaný výsledek tak se podle toho zařídím dále (zobrazím chybu, provedu jiný příkaz atd.), to je to co jsem psal, třeba pořádně číst a nepřekrucovat.
Díky za názor i když patrně nemáte ani představu o čem píšu.
31. 5. 2014 13:36:31
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028230
Pokud chcete používat CLI, používejte přece opravdový příkazový řádek, kde navíc získáte možnost využít všechny ostatní unixové utility.
Toto je hra na příkazový řádek, která má jen nevýhody.
31. 5. 2014 13:42:35
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028229
Fido123
verified
rating uzivatele
(13 hodnocení)
31. 5. 2014 13:44:57
Napsal Repox;1093713
A zbytek je mimo mísu, protože jste zatím nepochopili smysl.
No zatím jsme jenom pochopili nesmysl.
31. 5. 2014 13:44:57
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028228
Repox
verified
rating uzivatele
31. 5. 2014 13:53:34
Napsal Martin Schlemmer;1093715
Pokud chcete používat CLI, používejte přece opravdový příkazový řádek, kde navíc získáte možnost využít všechny ostatní unixové utility.
Toto je hra na příkazový řádek, která má jen nevýhody.
Ale já chci získat přesně pravý opak, a to výhody příkazového řádku přímo v kódu aplikace plus s dalšími výhodami navíc (méně kódu, každá metoda se provede pouze jednou bez ohledu na to kolikrát je zavolána atd. atd.)
---------- Příspěvek doplněn 31.05.2014 v 13:58 ----------
Napsal Fido123;1093716
No zatím jsme jenom pochopili nesmysl.
Jsme? Ostatní se třeba snaží přesvědčit mě o tom, že tato cesta je špatná a já to respektuju (i když mám vyzkoušeno, že psaní přes tuhle knihovnu je opravdu snažší a rychlejší) ostatně to jsem taky chtěl. Ty jsi nic konstruktivního nepřinesl takže si asi jediný kdo nepochopil nic.
31. 5. 2014 13:53:34
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028227
unabombe
verified
rating uzivatele
(10 hodnocení)
31. 5. 2014 14:01:57
Ale jo, celkem se mi to líbí, sice bych to pojmul trochu jinak, ale nápad to není špatnej.
Každej kdo přijde s novým přístupem dostane ťafku, z toho si nic nedělej.
31. 5. 2014 14:01:57
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028226
Cachování metod je něco, co byste opravdu neměl dělat. Pro urychlení kódu použijte standardní nástroje, například PHP OPcache.
Existují metody a funkce, které s každým zavoláním můžou, nebo i musí vrátit něco jiného.
...
31. 5. 2014 14:07:26
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028225
Fido123
verified
rating uzivatele
(13 hodnocení)
31. 5. 2014 14:11:34
Napsal Repox;1093718
Jsme? Ostatní se třeba snaží přesvědčit mě o tom, že tato cesta je špatná a já to respektuju (i když mám vyzkoušeno, že psaní přes tuhle knihovnu je opravdu snažší a rychlejší) ostatně to jsem taky chtěl. Ty jsi nic konstruktivního nepřinesl takže si asi jediný kdo nepochopil nic.
Aha, chceš prostě programovat pomocí jedné metody, do které budeš akorát vždycky zadávat jiný řetězec, jehož tvary si budeš pamatovat. Už to asi chápu.
31. 5. 2014 14:11:34
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028224
Repox
verified
rating uzivatele
31. 5. 2014 14:27:11
Napsal unabombe;1093727
Ale jo, celkem se mi to líbí, sice bych to pojmul trochu jinak, ale nápad to není špatnej.
Každej kdo přijde s novým přístupem dostane ťafku, z toho si nic nedělej.
To je v pořádku, možná jsem nezačal úplně nejlíp a asi si nikdo z reagujících neumí ani představit jak je taková práce jednoduchá. Já použil tuhle třídu mimojiné v jednom mém pluginu pro WordPress a ve výsledku jsem zmenšil kód o skoro 40% a daleko víc jej zpřehlednil.
Možná to chtělo požádat o ukázky kódu například pro konkrétní práce s obrázky, soubory nebo s třeba parsováním RSS kanálů a poté jim ukázat, že není třeba psát tolik řádků kódu, že stačí pouze jeden max dva. Každopádně třídu časem hodím na github a pak se uvidí :)
---------- Příspěvek doplněn 31.05.2014 v 14:27 ----------
Napsal Martin Schlemmer;1093728
Cachování metod je něco, co byste opravdu neměl dělat. Pro urychlení kódu použijte standardní nástroje, například PHP OPcache.
Existují metody a funkce, které s každým zavoláním můžou, nebo i musí vrátit něco jiného.
...
samozřejmě, já myslel využití spíše v rámci aplikace u funkcí které jsou více náročnější na výpis dat. Můžu do cache ukládat zcela automaticky pro každý příkaz nebo naopak jen pro konkrétní příkaz. Výhoda je v tom, že mám absolutně pod kontrolou co se bude cachovat a v tom, že nemusím psát mraky dalšího kódu. Cache je taky dočasná tedy při ukončení scriptu se vymaže, nebo trvalá, která se maže po stanovené době.
Další výhoda je v tom, že na konkrétní příkaz můžu napasovat libovolnou funkci. Když mi některá nativní funkce PHP vytěžuje server, můžu si na ní napsat rozšíření a spouštět ji příkazem se zapnutou cache. Pak se provede pouze jednou.
31. 5. 2014 14:27:11
https://webtrh.cz/diskuse/simulator-prikazoveho-radku-v-php#reply1028223
Pro odpověď se přihlašte.
Přihlásit