#php #zend-framework
#php #zend-framework
Вопрос:
У меня есть следующий код в bootstrap.php
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH . '/controllers/actions/helpers',
'Default_Controller_Action_Helper'
);
И помощники действий в этом каталоге имеют префикс: Default_Controller_Action_Helper_
Мой вопрос: почему все работает одинаково, когда я добавляю символ подчеркивания в конце префикса Default_Controller_Action_Helper в bootstrap.php ? Ничего не меняется с подчеркиванием или без подчеркивания в конце префикса в bootstrap.php
Этот код работает так же, как и приведенный выше, без каких-либо изменений:
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH . '/controllers/actions/helpers',
'Default_Controller_Action_Helper_'
);
Какие-либо известные объяснения такого поведения вообще?
Ответ №1:
Если вы проработаете свой путь через код, начиная с Zend/Controller/Action/HelperBroker.php и посмотрите на addpath(), который в конечном итоге приведет вас к Zend/Loader/PluginLoader.php и _formatPrefix().
Вы увидите, что последняя строка этой функции есть return rtrim($prefix, '_') . '_';
, поэтому ваш символ ‘_’ удаляется, если он есть, а затем добавляется снова, чтобы иметь дело со случаями, когда он опущен, отсюда и поведение, которое вы видите.
Чтобы по-настоящему изучить ZF, вам нужно разобраться в коде и понять, что происходит на самом деле.
Ответ №2:
$x = rtrim($x, '_') . '_';
Это распространенный способ нормализации параметров. Другой пример
$x = substr($x, -1) == '_' ? substr($x, 0, -1) : $x;
Вероятно, существует гораздо больше способов нормализовать значения