Нет, не то, что я знаю. В любом случае, есть несколько неявных вопросов, связанных с этим. Во-первых, вы должны всегда давать функции (и переменные в этом отношении) значимые имена . Тем не менее, __()
не является значимым именем вообще. Наоборот, на самом деле это имеет значение no . Во-вторых, рекомендуется использовать префикс только private
и protected
функций (и, опять же, переменных в этом отношении) с подчеркиванием.
Наконец, с тем, как работают помощники Zend View, вам бы пришлось «обмануть» систему, чтобы найти помощника View, если он был назван __ (). Вы должны были бы назвать это как Zend_View_Helper___
, и это не сработало бы. Не говоря уже о том, что это повлечет за собой необходимость назвать ваш файл __.php
.
Полагаю, вы могли бы назвать своего помощника Zend_View_Helper_T
, и в этом случае вы могли бы переводить вещи, используя $this->t($string);
(я проверял это, и это работает), но опять же вы всегда должны использовать значимых имен .
Редактировать
До сих пор не осознав, что вы хотите вызвать его из контроллера , я решил пересмотреть свой ответ и дать небольшой отзыв о комментарии, который получил от нижестоящего избирателя.
Трудно рекомендовать создать класс-оболочку для Zend_Controller_Action
, в котором можно создать функцию _()
, по следующей причине:
- Потому что, независимо от того, является ли он "принятым стандартом" или нет, я
подтвердите, что все методы и переменные должны иметь
осмысленное имя. Я должен утверждать это, потому что я твердо верю в
следующие явные стандарты кодирования (в отличие от этих "слухов"
или «недавно принятые» практики, которые не соответствуют
известная - и, следовательно, доверенная - парадигма). Тем не менее, должен груша, или
даже Зенд, решит принять такое радикальное изменение однажды, я буду
смирись с моим нравом. ПРИМЕЧАНИЕ: можно утверждать, что заслуживающие доверия
такие компании, как Drupal и их самопровозглашенные лучшие практики могли
считаться явными стандартами кодирования, но я не согласен. Зачем? Так как
Груша ... ну ... это груша. А Zend - это «Компания PHP». Это тяжело
чтобы получить больше доверия, чем это. Если кто-то не согласен с этим последним
Скажите, пожалуйста, почему или поправьте меня вместо того, чтобы голосовать «вниз». Независимо от стандартов
просто предложение не требуется; следовательно, они должны рассматриваться как
например. Итак, я думаю, если вы следуете некоторым стандартам, это хорошо! Эти
в конце концов, это не правила.
Тем не менее, решение Маркуса было хорошим, кроме имени функции (по причинам, указанным ранее). Единственное, что я хотел бы изменить - это вызов Zend_Registry::get()
в функции _()
. Если вы планируете вызывать эту функцию столько, сколько вы намекаете, то что-то вроде этого может работать лучше:
class MyProject_Controller_Action extends Zend_Controller_Action
{
/**
* the translator object
* @var Zend_Translate
*/
protected $_translator;
public function init()
{
$this->_translator = Zend_Registry::get('Zend_Translate');
}
/**
* note my new method name, you don't have to use it but I still
* recommend it. the name is just a suggestion, if you prefer something
* like _translate() or _trnslte() then by all means (although I don't
* recommend abbreviations unless they're super obvious I guess).
*/
protected function _trans($string)
{
return $this->_translator->translate((string) $string);
}
}