
Nefunkční script v PHP
Ahoj, nevidí prosím někdo chybu? Pomůže mi prosím někdo? Už fakt nevím co s tím Děkuji
namespace Testing;
use \path\AAA;
use \path\BBB;
use \path\CCC;
class Test {
public function __construct(){
$key='a';
$array=['a'=>'AAA','b'=>'BBB','c'=>'CCC'];
if(array_key_exists($key, $array)) $obj=new $array[$key]();
}
}
Možná bych začal tím - jakou chybu ti to píše?
Kód po stránce syntaxe vypadá správně.
Chyba je ta, že funkce __autolader() hledá soubor \XXX místo \path\XXX
a ako mas urobeny autoloader?
Jak již napsal los je nutné specifikovat celý namespace v případě, že vytváříš objekt dynamicky pomocí stringu viz dokumentace http://php.net/manual/en/language.namespaces.impor ting.php#example-271
Škoda, že tam není uveden jediný příkad jak použít tu volanou třídu uloženou v array()
K čemu? Přeci ty děláš to samé, vytáhneš jeden prvek z pole (název třídy) a dle něj vytvoříš objekt, přičemž v dokumentaci dělají to samé jen nemají pole jako ty, ale přímo ten "jeden prvek" - ten konkrétní název.
Co se týče tvého kódu, stačí upravit řádek kde vytváříš objekt a přidat tam namespace (případně už to upravit v tom array):
Jinak ten odkaz na dokumentaci byl zejména na to, aby jsi se mohl podívat že je to zdokumentovaná vlastnost PHP (nutnost psát celý namespace v případně dynamického vytváření objektů) a použít ji.
Tie use na začiatku sú zbytočné, keďže nie sú nikde použité. Pri dynamickom vytváraní inštancie triedy podľa premennej (new $premenna()) je potrebné mať v premennej názov triedy vrátane menného priestoru.
Tohle my hází chybu
Spätné lomítko v reťazci musíš escapovať:
Úvodné lomítko tam nemusí byť vôbec, viď dokumentácia:
Mě to tedy funguje jen s tema lomítkama na začátku, bez nich mi to hledá ve vnořeném adresáři, přitom v autoloaderu mám absolutní cestu, tak nevím..
Tak to tam máš nejakú chybu.
Omlouvám se, moje chyba. Psal jsem kód z iPadu a přehlédl jsem to. Lomítka musíš escapovat (jinak escapuje ty uvozovky a vytváří chybu) jak již psal los.