NiespecjalnieUzdolniony
- Super Gaduła
- 843 24 194 67
Siemka,
Zrobiłem mały autoloader klas i chciałbym prosić was o ocenę i rady. A to kod:
Jako że kod może się ciężko czytać(wiem jest spory bałagan) śpieszę z wyjaśnieniem co robi co. A więc tak
Ponadto chciałem się dowiedzieć co jeszcze muszę poprawić aby moje wypociny były zgodne z PSR-4? Jeszcze nie ogarniam tych standardów :/
Ps. Napisałem "Wszystkie rady" ale powinienem uwzględnić, że nie chcę rad typu przerzuć się na composera bo to będę robić, ale wolę najpierw wybadać teren
Dzięki!
Zrobiłem mały autoloader klas i chciałbym prosić was o ocenę i rady. A to kod:
<?php
class AutoLoader{
private $_ns;
private $_directory;
private $_regexp;
private $_replace;
function __construct($namespace){
$this->_ns=$namespace;
$this->register();
}
function register(){
spl_autoload_register(array($this, 'autoload'));
}
function autoload($class){
$this->_regexp='/'.addslashes(DIRECTORY_SEPARATOR).'(\w*)$/';
$this->replace=addslashes(DIRECTORY_SEPARATOR).'$1'.addslashes(DIRECTORY_SEPARATOR).'$1';
$this->_directory='..'.str_replace(
str_replace('/',DIRECTORY_SEPARATOR,$_SERVER['DOCUMENT_ROOT']),DIRECTORY_SEPARATOR,str_replace(['\\','/'],DIRECTORY_SEPARATOR,$this->_ns[$class])
).preg_replace(
$this->_regexp,$this->replace,str_replace('\\',DIRECTORY_SEPARATOR,$class)
).'.php';
require_once $this->_directory;
if(file_exists($this->_directory))
require_once$this->_directory;
}
}
$namespace=[
'Core\\Router'=>__DIR__.'/prezentacja/src/',
'Core\\Controller'=>__DIR__.'/prezentacja/src/',
'Core\\View'=>__DIR__.'/prezentacja/src/',
'Core\\Model'=>__DIR__.'/prezentacja/src/'
];
new AutoLoader($namespace);
Jako że kod może się ciężko czytać(wiem jest spory bałagan) śpieszę z wyjaśnieniem co robi co. A więc tak
- W public/index.php mam takie coś require_once __DIR__.'/../vendor/autoloader.php'; >> tak zerżnięte z composera
- Tworzę obiekt z klasy AutoLoader i przekazuję do niej tablicę $namespace
- W konstruktorze zapisuję to co było w $namespace to wewnętrznej zmiennej klasy
- Przeskakuję do metody register()
- Uruchamiam spl'a
- Gdy pojawi się zapotrzebowanie na klasę to spl wywołuje metodę autoload()
- Wybieram odpowiedni element tablicy na podstawie $class
- Obrabiam to wszystko tak, że wychodzi mi link do klasy.
Ponadto chciałem się dowiedzieć co jeszcze muszę poprawić aby moje wypociny były zgodne z PSR-4? Jeszcze nie ogarniam tych standardów :/
Ps. Napisałem "Wszystkie rady" ale powinienem uwzględnić, że nie chcę rad typu przerzuć się na composera bo to będę robić, ale wolę najpierw wybadać teren
Dzięki!
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.