09.04.2016, 19:24
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:
Kod PHP:
<?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!