Do tego momentu użyłem proceduralnych autonomicznych funkcji autoloadera i zarejestrowałem je za pomocą spl_autoload_register(), aby automatycznie ładować moje (zazwyczaj) klasy z przypisanymi nazwami. Ostatnio jednak zauważyłem, że ludzie wspominali o stosowaniu klas autoloadera w połączeniu z niektórymi z czołowych frameworków PHP.Funkcja autoloadera PHP vs. funkcja autoloadera proceduralnego?
Prawie cały mój kod jest zorientowany obiektowo w dzisiejszych czasach, ale tak naprawdę nie widzę zalet korzystania z klasy "Autoloader" zamiast podstawowej funkcji w tym przypadku. Jeśli chodzi o testowalność, czuję się całkiem nieźle jeśli chodzi o sprawdzanie w testach testów class_exists(), aby sprawdzić, czy funkcje proceduralne ładują pliki poprawnie.
więc moje pytania są trzy:
- Jakie zalety i funkcje (jeśli w ogóle) może kołysać mnie byłaby rzeczy i zacząć używać pełnowartościowy obiekt do plików klasowych autoload?
- Czy brakuje tu pewnych rażących zalet poza oczywistymi funkcjami OOP?
- Czy możesz poprosić o autoloader proceduralny lub klasyczny?
UPDATE
Poniżej jest jakiś kod przykładem typowej funkcji autoload mogę zatrudnić. Jest to metakod, więc nie szukaj literówek. Organizuję struktury katalogów tak, aby odzwierciedlały przestrzenie nazw. Hipotetyczna funkcja explode_namespaces()
może być teoretycznie włączona jako metoda statyczna obok metody statycznej w klasie, więc jest to jedna z korzyści. Może być czystsze łączenie tych różnych funkcji "narzędziowych" jako metod w jednej klasie.
function autoload($class_name)
{
$root = APP_LIBS; // a directory path constant set at config time
if ($namespaces = explode_namespaces($class_name)) {
$domain = array_shift($namespaces);
$root .= "/$domain/";
$class_name = array_pop($namespaces);
$directories = array();
foreach ($namespaces as $directory) {
$directories[] = $directory;
}
$root .= implode($directories, '/');
}
$file = "$root/$class_name.php";
if (file_exists($file)) {
include $file;
}
}
Usunąłem część "odpowiedź" z twojego pytania, ponieważ nie ma to znaczenia dla pytania. Powinieneś rozważyć dodanie własnej odpowiedzi, to prawdopodobnie pomoże innym :) – James