Diskuze: Nefunkční autoloader
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= 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, ve funkci loadClass smaž to 'classes/'.
Vždyť ta chyba píše, že nemůže najít soubor na cestě:
'classes/classes\Api.php'.
Funkce tedy bude vypadat takto:
function loadClass($class){
require $class . '.php';
}
Je to proto, že v proměnné $class je celé jméno třídy, tedy i package.
Ahoj, tohle není problém v cestě, nýbrž v názvu třídy (a posléze souboru). Jelikož využíváš use, bere se název třídy včetně jmenného prostoru. Nechá se to jednoduše upravit a jmenný prostor odebrat.
use classes\Api;
/**
* Načte zadanou třídu
*
* @param string $name Název třídy (včetně jmenného prostoru)
*/
function loadClass($name) {
// Rozdělení na pole
$nameArray = explode("\\", $name);
// Název třídy je na posledním indexu
$class = end($nameArray)
// Načtení třídy
require 'classes/' . $class . '.php';
}
spl_autoload_register("loadClass");
$api = new Api();
V návaznosti na komentář od Petra to trochu upravuji, aby to bylo univerzálnější. Každopádně jeho řešení bude lepší.
use classes\Api;
/**
* Načte zadanou třídu
*
* @param string $name Název třídy (včetně jmenného prostoru)
*/
function loadClass($name) {
// Rozdělení na pole
$nameArray = explode("\\", $name);
// Cesta k třídě
$class = implode("/", $nameArray);
// Načtení třídy
require $class . '.php';
}
spl_autoload_register("loadClass");
$api = new Api();
Zobrazeno 4 zpráv z 4.