Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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]();
     }
}

Předmět Autor Datum
Možná bych začal tím - jakou chybu ti to píše? Kód po stránce syntaxe vypadá správně.
martin.developer 16.03.2015 09:58
martin.developer
Chyba je ta, že funkce __autolader() hledá soubor \XXX místo \path\XXX
inPHP 16.03.2015 13:36
inPHP
a ako mas urobeny autoloader?
wam_Spider007 16.03.2015 14:28
wam_Spider007
Jak již napsal los je nutné specifikovat celý namespace v případě, že vytváříš objekt dynamicky pomo…
martin.developer 16.03.2015 17:57
martin.developer
Škoda, že tam není uveden jediný příkad jak použít tu volanou třídu uloženou v array() :-(
inPHP 16.03.2015 18:05
inPHP
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,…
martin.developer 16.03.2015 18:35
martin.developer
Tie use na začiatku sú zbytočné, keďže nie sú nikde použité. Pri dynamickom vytváraní inštancie trie…
los 16.03.2015 17:39
los
$namespace = "\path\"; Tohle my hází chybu :-/
inPHP 17.03.2015 07:53
inPHP
Spätné lomítko v reťazci musíš escapovať: $namespace = "\\path\\"; Úvodné lomítko tam nemusí byť v…
los 17.03.2015 08:41
los
Mě to tedy funguje jen s tema lomítkama na začátku, bez nich mi to hledá ve vnořeném adresáři, přito…
inPHP 17.03.2015 11:47
inPHP
Tak to tam máš nejakú chybu. poslední
los 17.03.2015 13:12
los
Omlouvám se, moje chyba. Psal jsem kód z iPadu a přehlédl jsem to. Lomítka musíš escapovat (jinak es…
martin.developer 17.03.2015 09:17
martin.developer

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):

public function __construct(){
          $namespace = "\path\";
          $key='a';
          $array=['a'=>'AAA','b'=>'BBB','c'=>'CCC'];
          if(array_key_exists($key, $array)) {
              $className = $namespace . $array[$key]; // Spojíme dva stringy - namespace a název třídy do jednoho stringu
              $obj=new $className(); // Vytvoříme instanci třídy dle jména v proměnné
          }
}

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.

Zpět do poradny Odpovědět na původní otázku Nahoru