Кстати, еще раз перечитал заголовок, и усматриваю
Кстати, еще раз перечитал заголовок, и усматриваю довольно серьезное непонимание вещей. Ты сравниваешь вообще разные механизмы. Давай по порядку:
-
xPDO::loadClass()- это метод для подгрузки классов, при чем без разницы каких, xPDO-классов или нет. Рассмотрим на примере: если нам нужно создать новый объект, к примеру$modx->newObject('modUser'), то для этого нам нужен класс modUser, то есть его надо подгрузить. Так вот,xPDO::loadClass($className)этим и занимается, и он автоматически вызывается внутри методаnewObject()(как и других похожих методов, типаgetObject(),getCollection()и т.п.). -
xPDO::addPackage()нужен для того, чтобы подключить еще один пакет с классами, то есть еще одну директорию (как правило это директория модуля). Когда пакет подключен, тоxPDO::loadClass()ищет во всех подключенных модулях, пока не найдет запрошенный класс (если, как писалось выше, третий параметр не установлен в значение true). -
xPDO::addExtensionPackage()- это просто автоматическое подключениеaddPackage(), просто для удобства и автоматизации. -
xPDO::getService()- вот это совсем другая песня. Для нее справедливо и все то, что перечислено выше (так как тоже используется методloadClass(), иaddPackage()(если надо, само собой еще до вызова методаgetService())), но этот метод используется для расширения самого объекта$modx. К примеру,$modx->getService($alias, $class);В случае успеха будет доступен объект$modx->$alias, к примеру$modx->mailили$modx->error. И это совсем не для xPDO-классов.
Так понятней?