Як перевірити існування класу stack overflow російською

Намагаюся перевірити через class_exists - функція чомусь не працює.

У class_exists є безглузде властивість пробувати автозавантажувані клас, якщо другий аргумент виставлений в true (це значення за замовчуванням). Функція перевіряє не наявність класу в поточному Рантайм, а наявність класу в додатку - доступний він, якщо зараз буде створено новий інстанси за допомогою new. У момент підзавантаження PHP звернеться до вашого Автозавантажувач, який однозначно спробує завантажити файл, причому не include_once. після якого ще можна врятувати ситуацію, а require_once. і робите ви це навіть без перевірки на існування файлу. Тому у вас потенційно вбивча ситуація що з new. що з class_exists.

В першу чергу автозавантажувач ніколи не повинен робити потенційно руйнівних дій. Їх може бути багато. система Автозавантажувач PHP влаштована так, щоб могло прийти дванадцять людей, встановити по завантажувачу, і всі вони відпрацювали - якщо один не впорався, в хід йде наступний. Тому ваш автозавантажувач повинен просто нічого не робити. якщо він не може знайти клас.

Друге, про що варто сказати, так це про менеджера залежностей Composer. Мені шалено не подобається, що він об'єднує в собі функуціі менеджера залежностей і Автозавантажувач, але в даний момент він є стандартом індустрії, тому найпростіше було б покласти автозагрузку на нього.

Якщо ж ви все-таки хочете написати свій власний завантажувач - вам потрібно зробити в ньому перевірку існування файлу і реєстрацію директорії, щодо якої відраховувати. Ще краще це зробити відповідно до стандарту PSR-4. за яким працює автозавантажувач Composer. Наскільки розумію, перше попередження у вас з-за того, що ви вказуєте include_path від балди, і PHP спочатку шукає клас там.

У будь-якому випадку після реалізації коректного завантажувача ви зможете безпроблемно використовувати class_exists для перевірки існування класу.

Схожі статті