Вы можете переименовать эти файлы, чтобы сделать их совместимыми с PSR-4 (маловероятно, потому что это требует использования пространств имен - в 10-летнем коде?) Или PSR-0. Кроме того, вам необходимо удалить любую явную загрузку этих файлов через include
, include_once
, require
или require_once
, поскольку имена файлов изменены.
PHP будет автоматически загружать эти классы по их имени класса. Это может привести к возникновению проблем, если повсеместно не соблюдается чувствительность к регистру в имени класса. Пример:
class UpperCase {}
$a = new upperCase();
самозарядные попытается найти файл с расширением upperCase.php
, который не будет соответствовать PSR-0 необходимый UpperCase.php
, так что код не удастся.Тем не менее, это будет работать, что делает ситуацию не лучше:
class UpperCase {}
$b = new UpperCase();
$a = new upperCase();
Причина заключается в том, что PHP обрабатывает имена классов чувствительны к регистру, поэтому после загрузки класса, вы можете использовать любой случай в его имени. Это только первое вхождение в ваш кодовый путь, который должен соответствовать. Проблема заключается в том, чтобы убедиться, что это действительно так, поэтому по существу это должно быть правильным везде.
Да, функция classmap - это более простой способ. Но вы все равно хотите удалить include/require
звонки, чтобы немного улучшить производительность, поэтому вам придется прикоснуться к коду в любом случае. И, несмотря на возраст, его нужно поддерживать - так почему бы не сделать это полностью, переключившись на известный стандарт автозагрузки. Это поможет вам в долгосрочной перспективе, когда вам придется параллельно поддерживать классы PSR-0/4 и этот старый код.
если добавить автозагрузку в composer.json устаревших библиотек она работает – shobekhan
Но если я добавить в composer.json моего проекта не работают «хранилищ»: [{ «типа»: «пакет» , "пакет": { "имя": "Shoaib/тест", "типа": "пакет", "версия": "мастер", "источник": { "URL": «https: //github.com/shobekhan/test.git ", " type ":" git ", " reference ":" master " }, " autoload ": { "classmap": ["Cache /"] } } } ] – shobekhan
Вам необходимо поместить раздел автозагрузки в composer.json вашего пакета shoaib/test. В качестве альтернативы, если у вас нет контроля над пакетом, вы можете попробовать определить его на верхнем уровне вашего composer.json, но я не уверен, что это сработает. –