Jak vytvořit v PHP objekt kontroleru, jehož název je v poli

Marián

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?
                               
« Poslední změna: 30. 01. 2018, 14:48:05 od Petr Krčmář »


Děkuji za možnost editace příspěvku.

Marián

Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
« Odpověď #2 kdy: 30. 01. 2018, 14:33:09 »
Díky ale na to jsem se ale neptal.

WerK

Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
« Odpověď #3 kdy: 30. 01. 2018, 14:38:00 »
Stačí mít plně kvalifikovaný název ve stringu:

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

Marián

Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
« Odpověď #4 kdy: 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();


Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
« Odpověď #5 kdy: 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

Marián

Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
« Odpověď #6 kdy: 30. 01. 2018, 17:47:08 »
Myslíš tak, ty rozumbrado?
Kód: [Vybrat]
$className = '\Controllers\'.ucfirst($this->url[0]);
$instance = new $className();

WerK

Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
« Odpověď #7 kdy: 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.

Marián

Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
« Odpověď #8 kdy: 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.....

BoneFlute

  • *****
  • 2 047
    • Zobrazit profil
Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
« Odpověď #9 kdy: 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

none_

Re:Jak vytvořit v PHP objekt kontroleru, jehož název je v poli
« Odpověď #10 kdy: 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:
  • Co je promenna $this->url?
  • Co vrati volani $this-url[0]
  • Je vytvoreny retezec opravdu spravny pro tu tridu, kterou chcete vytvorit?
  • Pada vam to s nejakou chybout?
Dokud tohle nesepisete, nema cenu ani diskuzi zacinat.

Re:Jak vytvořit v php objekt kontroleru jehož název je v poli
« Odpověď #11 kdy: 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.