Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Marián 30. 01. 2018, 14:00:53

Název: Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: Marián 30. 01. 2018, 14:00:53
Ahojte, jak správně vytvořit objekt kontroleru když používám i namespace a název kontroleru je v poli?
Kód: [Vybrat]
$object = new \Controllers\ucfirst($this->url[0])();Není na to nějaká php funce?
                               
Název: Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
Přispěvatel: to_je_jedno 30. 01. 2018, 14:19:30
takhle se to nedela.
https://symfony.com/doc/current/routing.html
Název: Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
Přispěvatel: Marián 30. 01. 2018, 14:33:09
Díky ale na to jsem se ale neptal.
Název: Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
Přispěvatel: WerK 30. 01. 2018, 14:38:00
Stačí mít plně kvalifikovaný název ve stringu:

$className = '\Foo\Bar\MyClass';
$instance = new $className();
Název: Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
Přispěvatel: Marián 30. 01. 2018, 15:33:48
Stačí mít plně kvalifikovaný název ve stringu:

$className = '\Foo\Bar\MyClass';
$instance = new $className();
To je rada jako prase, když budu znát název třídy, tak proč bych ji cpal ještě do proměnné a nezavolal tu třídu rovnou?
$instance = new \Foo\Bar\MyClass();
Název: Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: Rob Ros 30. 01. 2018, 16:00:25
To je rada jako prase, když budu znát název třídy, tak proč bych ji cpal ještě do proměnné a nezavolal tu třídu rovnou?
$instance = new \Foo\Bar\MyClass();

Tohle mi pripomnelo http://www.lamer.cz/quote/5639

Tip: Tu promennou si muzes dynamicky naplnit
Název: Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: Marián 30. 01. 2018, 17:47:08
Myslíš tak, ty rozumbrado?
Kód: [Vybrat]
$className = '\Controllers\'.ucfirst($this->url[0]);
$instance = new $className();
Název: Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: WerK 31. 01. 2018, 13:13:14
Myslíš tak, ty rozumbrado?
Kód: [Vybrat]
$className = '\Controllers\'.ucfirst($this->url[0]);
$instance = new $className();
Ano, přesně tak. Pokud nevidíte rozdíl mezi tímhle a Vaším řešením v prvním postu, tak tady asi nemá cenu dál ztrácet čas s obvious trollem.
Název: Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: Marián 31. 01. 2018, 16:30:09
Vydím, že chytrolínů je tu plná p*del, ale aby si to někdo zkusil, to ne.. jen urážky a blbý kecy.....
Název: Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: BoneFlute 31. 01. 2018, 23:05:14
Vydím, že chytrolínů je tu plná p*del, ale aby si to někdo zkusil, to ne.. jen urážky a blbý kecy.....

https://exploited.cz/otazky
Název: Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
Přispěvatel: none_ 01. 02. 2018, 11:29:42
Boze, nez clovek zacne urazet, tak by si mel uvedomit, ze lidi, kterych se pta netusi, co ma za problem.

Ano, ten kod by mohl teoreticky fungovat. Proc nefunguje, to z toho vaseho popisu nemuzeme zjistit. Nevime hlavne nasledujici:
Dokud tohle nesepisete, nema cenu ani diskuzi zacinat.
Název: Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
Přispěvatel: Ondrej Nemecek 01. 02. 2018, 12:47:15
Stačí mít plně kvalifikovaný název ve stringu:

$className = '\Foo\Bar\MyClass';
$instance = new $className();

Tohle je správná odpověď. Naplňte si

Kód: [Vybrat]
$className
a pak můžete udělat tu instanci. Pokud zavoláte konstruktor přímo, musíte už předem vědět, kterou třídu budete instancovat, což právě nevíte. Pokud chcete instancovat třídu v závislosti na datech například z url, musíte použít proměnnou.

Budete u toho muset taky ošetřit, když v ní bude jméno neexistující třídy anebo když by tam bylo jméno jiné třídy než controlleru. Mimo jiné to má význam pro bezpečnost.