Jak zavolat třídu v PHP podle zadané url

Libor

Jak zavolat třídu v PHP podle zadané url
« kdy: 20. 03. 2017, 19:31:49 »
Ahoj chlapy, potřeboval bych poradit s částí kódu v PHP.
v proměnné $_GET['url'] mám uloženou vždy celou url

echo $_GET['url'];
vypíše
/katalog/priroda-cr/voda-sladka/ryby-male

a potřebuji z této url vytvořit nový objekt třídy včetně namespace
$obj = new \Controls\Katalog\PrirodaCr\VodaSladka\RybyMale ();

Pokud třída neexistuje zavolat
$obj = new \Controls\Error404 ();

Poradil by mi prosím někdo jak to jednoduše udělat? Předem děkuji za pomoc.


Kit

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #1 kdy: 20. 03. 2017, 20:11:50 »
Rozparsuj si to URL po lomítkách, slož ho podle potřeby do proměnné třeba $class a pak už jen zavolej
Kód: [Vybrat]
$obj = new $class();Hoď si to do bloku try .. catch. Při výjimce si ji zachyť a vyhoď 404.

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #2 kdy: 20. 03. 2017, 20:46:31 »
Nicmoc reseni kite, obcas dokazes predvest vic.

Podivej se napr na http://symfony.com/doc/current/routing.html
Děkuji za možnost editace příspěvku.

robin martinez

  • *****
  • 1 103
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #3 kdy: 20. 03. 2017, 21:02:40 »
preg_match_all a regex /\/(\w*(-\w*)?)*/ by te alespon trochu mohl nasmerovat
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

robin martinez

  • *****
  • 1 103
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #4 kdy: 20. 03. 2017, 21:05:36 »
prevod na camelcase mozna timhle?


Kód: [Vybrat]
$output = preg_replace_callback('/-(.?)/', function($m) {
     return ucfirst($m[1]);
}, $input);
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript


robin martinez

  • *****
  • 1 103
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #5 kdy: 20. 03. 2017, 21:14:25 »
ted premejslim, ze to vlastne cely jde udelat vicemene jednim regexem, ale jsem linej si s tim hrat, doporucuji:


http://www.phpliveregex.com/

http://preg_replace_callback.onlinephpfunctions.com/
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Kit

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #6 kdy: 20. 03. 2017, 22:04:14 »
Podivej se napr na http://symfony.com/doc/current/routing.html

To má být vtip? Kvůli šesti řádkům instalovat Symfony?

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #7 kdy: 21. 03. 2017, 12:04:52 »
Podivej se napr na http://symfony.com/doc/current/routing.html

To má být vtip? Kvůli šesti řádkům instalovat Symfony?
Welcome to the real world Neo. A za chvíli mu někdo poradí, ať to přepíše do javy :D

robin martinez

  • *****
  • 1 103
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #8 kdy: 21. 03. 2017, 12:22:59 »
No, navrhnout Symfony (nebo jiny framework) je (asspon podle mych zkusenosti) nahodou docela dobrej napad. Protoze jinak si uzivatel udela skvely reseni po svym, vubec nepocita s tim, ze by tam mohla bejt bezpecnosti dira (protoze to PHPcko dneska prece umi kazdej, ne?) a pak se divi, kam zmizely ze serveru vsechny jeho data.


-- true story --
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #9 kdy: 21. 03. 2017, 12:55:55 »
No, navrhnout Symfony (nebo jiny framework) je (asspon podle mych zkusenosti) nahodou docela dobrej napad. Protoze jinak si uzivatel udela skvely reseni po svym, vubec nepocita s tim, ze by tam mohla bejt bezpecnosti dira (protoze to PHPcko dneska prece umi kazdej, ne?) a pak se divi, kam zmizely ze serveru vsechny jeho data.


-- true story --
Ano... a jsme opět u toho, jako vždy... HW je skoro zadarmo, zato člověk, kterej si dneska bez nějakýho FW ani neprdne a vlastně nemá ani páru, co a proč dělá, tak stojí ranec. Smutné, smutné, smutné. Ještě před pár roky by takoví lidi skončili na pokladně v supermarketu, protože na víc vlastně stejně nemají a současné IT je degradované na stejnou úroveň, jenom platy jsou vyšší, protože je lidí málo (je jich dost, jenom uklízečka si většinou ani nedovolí přemýšlet nad tím, že by šla programovat, i když na to většinou v pohodě má). Až doroste současná mladá generace, která v tom vyrůstá, platy pokladních budou vyšší, než "programátorů", protože těch budou plný pracáky. Výjimkou budou právě ti vývojáři frameworků a jazyků, protože to bude jediná opravdu kvalifikovaná práce, všichni javameni a spol se přesunou do kategorie lopata za 20k.

Kit

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #10 kdy: 21. 03. 2017, 16:29:48 »
No, navrhnout Symfony (nebo jiny framework) je (asspon podle mych zkusenosti) nahodou docela dobrej napad. Protoze jinak si uzivatel udela skvely reseni po svym, vubec nepocita s tim, ze by tam mohla bejt bezpecnosti dira (protoze to PHPcko dneska prece umi kazdej, ne?) a pak se divi, kam zmizely ze serveru vsechny jeho data.

Zrovna v Doctrine jsem nedávno našel odkaz na jednu z mnoha vlastností, která však nebyla zdokumentována a ani Google neporadil, co mělo být jako volitelný čtvrtý parametr jedné z mnoha metod. Takže i slavné frameworky docela kulhají.

Ty bezpečnostní díry se i s frameworkem dají udělat docela snadno.

Celé se to točí kolem toho, že framework zpracovává nějaký doménově specifický jazyk. Čím víc toho ten framework umí, tím méně se stává doménově specifickým a tím víc je běžným jazykem interpretovaným uvnitř jiného interpretru. Stává se tak zbytečnou mezivrstvou s chabou dokumentací a nevyzpytatelným chováním.

Z toho vyplývá, že smysl mají pouze frameworky, které toho moc neumí, ale to co umí, umí dokonale. Obvykle už v PHP jsou ve formě standardních knihoven.

Ivan Nový

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #11 kdy: 21. 03. 2017, 17:01:11 »
No, navrhnout Symfony (nebo jiny framework) je (asspon podle mych zkusenosti) nahodou docela dobrej napad. Protoze jinak si uzivatel udela skvely reseni po svym, vubec nepocita s tim, ze by tam mohla bejt bezpecnosti dira (protoze to PHPcko dneska prece umi kazdej, ne?) a pak se divi, kam zmizely ze serveru vsechny jeho data.

Zrovna v Doctrine jsem nedávno našel odkaz na jednu z mnoha vlastností, která však nebyla zdokumentována a ani Google neporadil, co mělo být jako volitelný čtvrtý parametr jedné z mnoha metod. Takže i slavné frameworky docela kulhají.

Ty bezpečnostní díry se i s frameworkem dají udělat docela snadno.

Celé se to točí kolem toho, že framework zpracovává nějaký doménově specifický jazyk. Čím víc toho ten framework umí, tím méně se stává doménově specifickým a tím víc je běžným jazykem interpretovaným uvnitř jiného interpretru. Stává se tak zbytečnou mezivrstvou s chabou dokumentací a nevyzpytatelným chováním.

Z toho vyplývá, že smysl mají pouze frameworky, které toho moc neumí, ale to co umí, umí dokonale. Obvykle už v PHP jsou ve formě standardních knihoven.

Úkolem frameworku není něco umět, ale standardizovat to, jak se co dělá.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #12 kdy: 21. 03. 2017, 19:11:16 »
Úkolem frameworku není něco umět, ale standardizovat to, jak se co dělá.
Kéž by... úkolem frameworku je často udělat prasárny za vývojáře a daný jazyk přiohnout nějakým směrem, takže věci, za který by se příčetný, průměrně inteligentní jedinec styděl, jsou najednou v pořádku, protože je udělal někdo jinej a schoval je do FW.
Zcela proti tvým představám většina frameworků rozbíjí standardy daného jazyka a snaží se do nich zavést kraviny, často po vzoru jiného jazyka. Jak psal Kit, je to velmi často zbytečná mezivrstva, která sice může vyřešit konkrétní problém "bez práce", ale často za cenu toho, že se používají vlastnosti frameworku optimalizované pro nějakou situaci i tam, kde se vůbec nehodí a lze je řešit velmi elegantně a efektivně v původním jazyce.

Když jsme u toho, Kit respect, protože je to jeden z mála lidí, kteří se nestydí za PHP a jeho rady evidentně pocházejí z praxe a mají hlavu a patu.

Kit

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #13 kdy: 21. 03. 2017, 20:13:32 »
Úkolem frameworku není něco umět, ale standardizovat to, jak se co dělá.

Tak standardizovat? Podívej se do libovolného frameworku, jak ignoruje návrhové vzory a porušuje všechny možné principy OOP. Od takových tvůrců si nenechám diktovat, jak mám programovat.

Kit

Re:Jak zavolat třídu v PHP podle zadané url
« Odpověď #14 kdy: 21. 03. 2017, 20:26:17 »
... Jak psal Kit, je to velmi často zbytečná mezivrstva, která sice může vyřešit konkrétní problém "bez práce", ale často za cenu toho, že se používají vlastnosti frameworku optimalizované pro nějakou situaci i tam, kde se vůbec nehodí a lze je řešit velmi elegantně a efektivně v původním jazyce.

Když jsme u toho, Kit respect, protože je to jeden z mála lidí, kteří se nestydí za PHP a jeho rady evidentně pocházejí z praxe a mají hlavu a patu.

Tragické na těch frameworcích bývá i chybně navržené a mizerně zdokumentované rozhraní. Zrovna dnes jsme narazili na záludnost jednoho z populárních frameworků, který se při běžné konfiguraci chová podivně a v rozporu s dokumentací.

Ano, dělám v PHP a nestydím se za to. Je moderním multiparadigmatickým jazykem. Je však u něj velmi důležité dodržovat jistou programátorskou kulturu, aby ten program mohl číst nejen počítač, ale i člověk. K tomu mi dopomáhej SOLID.