[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Автозагрузка классов
Страницы: 1, 2
twin
Цитата (icedfox @ 22.09.2015 - 11:25)
Смарти может подключать большое количество дополнительных классов, в зависимости от потребности в них, инклудить пачку из 70 файлов ради того, что бы сэкономить на одной регулякре разве не больший хардкор ?

Ну вот с этого и начнем. Вы видимо плохо разбирались в матчасти СМАРТИ. Я же несколько раз повторил - смарти умеет подключать свои классы сама. Достаточно подключить основной класс. Вот так:
include_once(SMARTY_DIR_LIB. 'Smarty.class.php');

Всё! Остальное она сделает сама.

Но если хочется выглядеть покруче не везде нужен шаблонизатор, то можно забобашить через автолоад, следующим загрузчиком, после вашего, вторым, тупо прописываем для смарти:
    spl_autoload_register(function ($className) {
.
.
.
);


spl_autoload_register(
function ($className)
{
set_include_path(SMARTY_DIR_LIB);
spl_autoload($className, '.class.php');
}
);
Это кривая реализация, только чтобы суть понятна была. Но работать наверняка будет.

Цитата
Данный код позволяет мне иметь имена файлов более привычные и понятные для меня, имея при этом нормальные имена в названии самих классов.
Это тоже слабый аргумент. Совсем не обязательно регулярки городить. Нужно просто углубиться в матчасть.

К тому же, а как же стандарты? :) Тот же PSR. Хотя тут я на вашей стороне. Я тоже не всегда их юзаю.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (bestxp @ 22.09.2015 - 12:01)
psr-0
psr-4
включая реализацию, остальное велосипед

Об этом разрабам СМАРТИ напиши.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
icedfox
Возможно мы друг друга не поняли.
полный код:
spl_autoload_register(function ($className) {
// для сматри используем отдельное подключение, указываем расположение физически
// определяем сматри через регулярку по начальному признаку

if (preg_match('/^smarty_\w+$/i', $className)) {
$fileName = SMARTY_DIR_LIB. '/sysplugins/' .$className. '.php';
} else {
$classPath = func_get_class_path($className);
$fileName = ROOT_DIR . DIRSEP . $classPath;
}

if (!file_exists($fileName)) {
throw new excep_code ("Ошибка подключения класса [ {$fileName} ] через spl_autoload_register", 404);
} else {
/** @noinspection PhpIncludeInspection */
require_once $fileName;
}


}
);

По моему, почти то же что и вы предложили :D
Цитата (twin @ 22.09.2015 - 18:28)
Это тоже слабый аргумент. Совсем не обязательно регулярки городить. Нужно просто углубиться в матчасть.

Согласен, возможно пересмотрю свои взгляды, если придумаю как мне удобнее именовать тогда будет.
twin
Цитата (icedfox @ 22.09.2015 - 12:53)
По моему, почти то же что и вы предложили :D
Вообще не то. :)
Дело в том, что вот этот код:
if (preg_match('/^smarty_\w+$/i', $className)) {
$fileName = SMARTY_DIR_LIB. '/sysplugins/' .$className. '.php';
}
не работает вообще. Для интереса можете закомментить.

А вот это:
Цитата
else {
  $classPath = func_get_class_path($className);
  $fileName = ROOT_DIR . DIRSEP . $classPath;
}
вместе с кучей вытекающих отсюда функций, решается двумя строчками. Если использовать возможности коллекции spl_autoload_.



_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
icedfox
Цитата (twin @ 22.09.2015 - 19:00)
не работает вообще. Для интереса можете закомментить.

Работает, спорить нет смысла. Проверено.
при отключенной регулярке получаем попытку инклуда файла
D:\\OpenServer\www\test.ru\Smarty_Internal_Debugsmarty_internal_debug.php

отсюда видно, что Смарти будет подгружать классы, через spl_autoload_register
С регулякой получаем верный путь
D:\\OpenServer\www\test.ru\app\views\smarty\libs\sysplugins\Smarty_Internal_Debug.php
twin
Цитата (icedfox @ 22.09.2015 - 13:19)
при отключенной регулярке получаем попытку инклуда файла
Ключевое слово "попытка". Он попытается, не найдет ничего и успокоится. Однако прежде чем он будет пытаться найти этот класс, он сначала найдет и подключит базовый. Smarty или SmartyBC, не важно. И когда этот файл будет подключен, то остальное не имеет смысла. В этом файле уже есть штатный лоадер. Вы попробуйте. :)
spl_autoload_register(function ($className) {
// для сматри используем отдельное подключение, указываем расположение физически
// определяем сматри через регулярку по начальному признаку
//if (preg_match('/^smarty_\w+$/i', $className)) {
// $fileName = SMARTY_DIR_LIB. '/sysplugins/' .$className. '.php';
//} else {

$classPath = func_get_class_path($className);
$fileName = ROOT_DIR . DIRSEP . $classPath;
//}

if (!file_exists($fileName)) {
throw new excep_code ("Ошибка подключения класса [ {$fileName} ] через spl_autoload_register", 404);
} else {
/** @noinspection PhpIncludeInspection */
require_once $fileName;
}


}
);
Наверняка на работоспособности сайта это не отразится.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
icedfox
именно так и пробовал, результат вам написал выше wink.gif
twin
А, ну дык естественно))) Вы же исключение бросаете жестко. Не давая шансов остальному коду. Его тоже закомментите на время.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.