2015-06-30 4 views
1

Использование CakePHP 2.6.7 (хотя и ищет, не CakePHP конкретного решения)Загрузка класса, если он еще не определен

Можно ли проверить, если класс уже определен и загружать только конкретный если этот класс еще не определен?

Пример

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

Можно ли проверить, был ли класс уже определен и загружать библиотеку внутри плагина, если он не имеет? В противном случае конфликты возникают из нескольких определений класса.

Я предполагаю, что то, что я ищу, - это что-то, что можно использовать в качестве специфичной для PHP (или CakePHP) версии защиты заголовков на C++.

+0

http://php.net/manual/en/function.class-exists.php – AbraCadaver

+0

Отдельные библиотеки из плагина, использования правильные пространства имен и голову для композитора. – ndm

+0

@ndm Как бы вы порекомендовали обработать ситуацию, когда плагин A нуждается в версии 1 библиотеки Foo, но плагин B нуждается в версии 2 библиотеки Foo? Это основной аргумент моего коллеги против того, что вы только что предложили (я уже назвал библиотеки, я не знаю, что вы подразумеваете под «головой для композитора»). – Kvothe

ответ

1

В соответствии с @ AbraCadaver свой комментарий, используя class_exists должен сделать трюк

if (!class_exists('MyClass',false)){ 
    include 'MyClass.php'; 
} 
+0

Спасибо :) Это решает проблему. Однако, как бы вы решили проблему с двумя плагинами в одном приложении, которым нужны разные версии одной и той же библиотеки? – Kvothe

+0

Добро пожаловать! По второму вопросу, боюсь, мне нужны подробности. Что вы подразумеваете под плагином, это класс? что вы понимаете под библиотекой и как одна версия отличается от другой? с подробными сведениями я уверен, что мы сможем найти решение :) –

+0

Плагин в этом смысле предназначен для рамки CakePHP - это целая группа классов, но действует как единое целое (например, плагин для адресного менеджера). Библиотека также может быть несколькими классами (до сих пор это всего лишь один). Различные версии могут отличаться небольшим исправлением ошибок или добавлением/устареванием функциональности - мы только начинаем внедрять правильный контроль версий. Помогает ли это разъяснить? – Kvothe