Diskuze: autoload funkce
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
pokud dodržuješ určitý standard, pak by namespace mělo odpovídat
adresářové struktuře. Tedy např.
namespace App\Model\Services\Users\UserManager
by mělo být ve složce
app/Model/Services/Users/UserManager.php
Pokud to máš poházené různě a nechceš vymýšlet vlastní řešení,
zkus:
https://github.com/…robot-loader
Pokud chceš opravdu sám, pak si myslím, že tvé řešení je dobré. Jen
by bylo fajn si to nějak cachovat, abys při každém požadavku nemusel
procházet všechny adresáře a hledat
Děkuji za odpověď určitý standart dodržuji resp Mám to rozděleno
jako
App/
nazev_adresaře/
Namespaces zatím nevyužívám resp kdybych je dodělal
např
<?php
namespace app\chyba\Controller;
class ChybaController {...}
Jak by pak měl ta autoload funkce vypadat aby tu třídu s daným namespacem
dokazala najít
Ja jí mam prozatím udělanou takto
function autoload($className) {
$file = $className . '.php';
if(file_exists($file)) {
require_once $file;
}
}
Od toho slouží composer který stejně nakonec budeš potřebovat. Takže dodržuj PSR-4 a nainstaluj si tam https://getcomposer.org/. Nejlepší řešení.
V proměnné className dostane funkce vždy kompletní název třídy i s jmenným prostorem. Tzn. pokud máš namespace app\chyba\Controller a třídu ChybaController tak při volání autoload funkce máš v proměnné className máš "\app\chyba\Controller\ChybaController". Teoreticky stačí převrátit lomítka a udělat require_once() na tu cestu.
Pokud by namespace neodpovídal adresářům tak už si tu proměnou musíš nějak rozparsovat podle lomítek a udělat si k tomu nějakou logiku.
Jinak souhlasím s ostatními, že je dobré se držet standardů ušetří ti to spoustu problémů.
Zobrazeno 5 zpráv z 5.