2015-06-05 2 views
2

В настоящее время я рекурсивно просматриваю папку моих классов, чтобы найти путь к моему классу, чтобы включить его. Проблема в том, что у меня много разных классов в разных папках, которые я хотел бы включить. Код, который я создал, грязный, но он работает.Динамический путь к spl_autoload

Код ниже не является рекурсивной функцией, которую я создал, но она будет работать для определенного пути в функции myAutoloader().

Есть ли способ передать путь к функции spl_autoload в PHP?

spl_autoload_register('myAutoloader'); 

    function myAutoloader($className) { 
     $path = '/classes'; 

     include $path . $className . '.php'; 
    } 

    //------------------------------------- 

    // this one will work, as its path is specified in spl_autoload 
    $myClass1 = new MyClass1(); 

    //this is located in /classes/other so it wont work 
    $myClass2 = new MyClass2(); 

ответ

1

Там нет никакого способа, чтобы пройти путь к функции обратного вызова, указанной в spl_autoload_register.
Вы можете создать только это осознание внутри функции:

function myAutoloader($className) { 

    $paths = array(
    'Class1' => '/subpath', 
    'Class2' => '/subpath/extra', 
    ); 

    include $paths[$className] . '/'. $className . '.php'; 
} 

То есть, я сильно препятствовать вам folliwing этого подхода. Вместо этого я действительно предлагаю вам:

  • Позвольте composer создать свою автозагрузку, выполнив это вручную.
  • Invest 10 минут чтения PSR-4 Specifications.
1

Если ваш класс "MyClass1" хранится вместе с именем файла, как "MyClass1.php" вы можете сделать:

set_include_path('/classes:/classes/other'); 
spl_autoload_register(); 
Смежные вопросы