Autor Zpráva
DelamPHP10LetAfurtLama
Profil *
Dobrý den, chtěl bych si vytvořit modulární načítání a volání funkcí v PHP, ale narazil jsem na pár problému. První z nich je ten, že se v PHP nedají vnořovat třídy. To je problém, protože to, jaký soubor chci includnout se systém dozví až uvnitř třídy.

Trocha kódu:
class PrvniTrida{
  function PrvniFunkce(){
  //v tento moment se dozvídám co chci použít za funkce
    $nazevBalicku = "Balicek1";
    //kontroluji ze soubor existuje. Pokud ano, priradim ho a zkontroluji zda existuje stejnojmena funkce.
    if(file_exists($nazevBalicku)){
      include_once($nazevBalicku);
      if(function_exists($nazevBalicku)){
          $nazevBalicku();
      }
    }
  }
}

To je první část kódu. Druhá část je ten soubor, který se přiřazuje:
function Balicek1($value, $id){
    $instance = new Balicek1;
    return $instance;
}

class Balicek1{
  //nejake funkce zde, o jejich volani se bude starat globalni funkce Balicek1
}

Kód je hodně osekaný od originálu ale myšlenka tam je.

V první části kódu se dozvím jaké funkce potřebuji načíst, načtu je a volám její globálni funkci. Problém je, že první část kódu je uvniř Třídy a v tom "modulárním" souboru který přiřazuji mám také Třídu. Možná že struktura těch "modulů" by mohla být uplně jiná a mám to celé vymyšlené úplně špatně? Zase házet to mimo třídu nechci protože to by zničilo tu modularitu. Jeden soubor navíc by mohl vytvořit chyby z důvodu stejnojmenných funkcí, proměnných atd.

Uvítám všechny návrhy. Jo a důvod proč neudělám foreach a nenačtu všechny balíčky najednou je ten, že chci mít možnost tam házet garbage kód, který necrashne celou stránku kvůli syntaxové chybě. Tím, že se kód načte jen když je potřeba je super jelikož se nemusí parsovat víc kódu než je třeba.
Keeehi
Profil
Automatické načítání tříd je samozřejmě už vyřešená záležitost. Použij composer. Kromě toho že je to nástroj pro instalaci balíčků třetích stran tak tam má i autoloader který ti zajistí automatické načtení tříd když jsou potřeba.
DelamPHP10LetAfurtLama
Profil *
Keeehi:
Trochu víc advanced než potřebuji. A nejsem si jistý zda to můj problém vyřeší. Ale díky moc za radu. Kouknu na to.


DelamPHP10LetAfurtLama:
A mám pocit že v composeru bych musel definovat cestu ke všem souborům, které chci načítat. Přidáním souboru do složky by se mi automaticky composerem nepřidal, tím jsem si jistý.
Keeehi
Profil
DelamPHP10LetAfurtLama:
Přidáním souboru do složky by se mi automaticky composerem nepřidal, tím jsem si jistý.
Tak to jsi si jistý špatně. Když použiješ PSR-4 tak přidané soubory to automaticky načítá aniž bys musel regenerovat ten autoload script. Hledá to název souboru podle názvu třídy a jejího namespace. Stejně jako to chceš dělat ty.

Trochu víc advanced než potřebuji.
Možná se ti to tak zdá ale composer je pro PHP projekt docela základ.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0