addPackage vs loadClass vs getService вчём правда брат?

Aug 24, 2014

Я часто когда писал под MODX задумывался что из этого мне надо и для чего. Тоесть сам вопрос где и как их использовать. Есть метод $modx->addExtensionPackage($class, $path) но минус этого метода в том что он добавляет в автоматическую загрузку и когда таких классов много это нагружает сайт. И так поехали где правда? Эти методы загружают класс то есть это замена include и require. Первый плюс в том что в случае ошибки мы получим сообщение в MODX error log. Второй плюс в том что если класс уже загружен то ошибки не будет и не надо писать типа if (! class_exists('classname')) {}.

loadClass()

public function loadClass($fqn, $path= '', $ignorePkg= false, $transient= false)

Используем в случае если надо загрузить класс который не использует базу данных

$path = MODX_CORE_PATH . 'components/mycomponent/model/';
$modx->loadClass('myclass.MyClass', $path, true, true);

Последний аргумент true сообщает MODX что наш класс не использует базу данных.

addPackage()

public function addPackage($pkg= '', $path= '', $prefix= null)

Используем если наш класс использует базу данных и имеет сгенерированые map фаилы.

$myclassModelPath = MODX_CORE_PATH . 'components/myclass/model/';
 
$modx->addPackage('Myclass',$myclassnModelPath , '');

Позволяет нам теперь пользоваться классом например написав так:

$modx->getObject('Myclass');

getService()

public function &getService($name, $class= '', $path= '', $params= array ())

Предзназначен для того чтоб мы легко могли пользоваться функциями класса через альяс:

$myclassModelPath = MODX_CORE_PATH . 'components/myclass/model/';
$modx->getService('myclassAlias', 'myclass.Myclass', $myclassModelPath);
//теперь можем использовать альяс для доступа к функциям
$modx->myclassAlias->myClassFunction();

Надеюсь вы нашли ответ на этот вопрос для себя раз и навсегда?