Печать

Краткое руководство по классам Joomla 1.5

Joomla! запускается на php 4 и php5. Это влияет на то, как мы описываем классы и используем объекты в Joomla!. В Joomla! решено продолжить использовать синтаксис PHP 4 по соображениям обратной совместимости, так как многие веб-серверы по прежнему используют php4. Как сторонние разработчики, мы должны следовать их примеру и всегда делать наши расширения совместимыми с PHP 4 и PHP 5, несмотря на то, что могут появитсья некоторые ограничения.

Есть некоторые важные вещи, которые мы должны знать, прежде чем начнем создание и использование классов. Сначала запомним важные пункты:
- Имена классов должны начинаться с прописных буквы.
- Все элементы должны придерживаться стандарта camelCase (стиль написания составных слов, при котором несколько слов пишутся слитно без пробелов, при этом каждое слово пишется с большой буквы).
- Имена методов должны начинаться с буквы в нижнем регистре.
- Приватные элементы должны начинаться с подчеркивания. Только php5 имеет поддержку модификаторов доступа, мы в этих целях используем особые именования для указания приватных элементов. Методы и свойства, которые имеют префикс подчеркивания - приватные элементы.

Мы часто передаем и возвращаем объекты и массивы по ссылке. Заметьте, что в PHP 5 объекты
всегда передается по ссылке. Методы, функции и параметры, которые возвращаются и передаются по ссылке имеют префикс в виде амперсанда Когда мы используем метод или функцию, которая возвращает ссылку, мы должны использовать &= , как демонстрирует следующий пример:

function &go()
{
    $instance = new stdClass();
    return $instance;
}
$reference =& go();

Когда мы передаем объекты мы должны иметь в виду, что PHP разных версий обрабатывают объекты разному.

Наследование от JObject

В Joomla! нам часто приходится сталкиваться с классом JObject. Многие из классов в Joomla! являются подклассами JObject. Этот базовый класс предоставляет нам некоторые полезные общие методы, включая стандартный модификаторы доступа и механизм обработки ошибок.

Чтобы стимулировать методологию PHP5, JObject эмулирует PHP5 позволяя нам использовать метод конструктора __constructor () в подклассах независимо от того, какая версия PHP используется.
Когда мы используем наш дочерний класс, мы должны, как правило, обьявить конструктор родителя класса. Это гарантирует, что конструктор класса родителя выполнится.

 
/**
 * Some Class which extends JObject
 */
class SomeClass extends JObject
{
    /**
     * Object name
     * @var string
     */
    var $name;
    /**
     * PHP 5 style Constructor
     *
     * @access  protected
     * @param string name
    */
    function __construct($name)
    {
        $this->name = $name;
        parent::__construct();
    }
}
 

Почти все Joomla! объекты и классы вытекают из базового класса JObject. Этот класс предоставляет несколько полезных методов, которые могут использовать все классы. Метод getPublicProperties() возвращает массив общедоступных свойств объекта. Это определяется на этапе выполнения и используются не свойства класса, а свойства объекта.
Методы get() и set() используются, чтобы получить и установить свойства объекта. Если мы используем get(), с несуществующего свойства, то будет возвращено значение по-умолчанию. Если мы используем метод set() для несуществующего свойства, то свойство будет создано. Оба эти методы могут быть использованы с частными свойствами.
Мы можем отслеживать ошибки, которые происходят в объекте, используя методы getErrors(), getError() и setError(). Ошибки будут зафиксированы в свойстве _errors в виде массива.

Работа с запросами

Вообще, когда мы разрабатываем PHP скрипты, мы активно работаем с массивами: $ _GET, $ _POST, $ _FILES, $ _COOKIE и $ _REQUEST. В Joomla! Вместо прямого доступа к ним мы используем статический класс JRequest. Используется это потому, что позволяет нам повысить бесопасность кода.
В основном мы используем два метода это JRequest:: setVar () и JRequest::getVar (). Первый для установки переменной, второй для получения переменной. В этот пример, мы получим значение id, и если id не установлен, мы вернемся значения по умолчанию (0).

$id = JRequest::getVar('id', 0);

JRequest:: setVar () метод используется для установки значений в запросе хэшей. По сравнению с JRequest:: getVar(), этот метод используется довольно редко. Наиболее часто он используется для установки значений по умолчанию. Например, нам нужно установить в компоненте задачу по умолчанию, если она еще не задана:

JRequest::setVar('task', 'someDefaultTask');

Полезный трюк: чтобы гарантировать, что переменная установлена, нужно использовать оба метода совместно. В данном примере, если name не установлено, мы поставили его значение по умолчанию - "unknown".

JRequest::setVar('name', JRequest::getVar('name', 'unknown'));

Вот некоторые другие удобные методы JRequest - это getInt(), getFloat(), getBool(), getWord(), getCmd(), и getString(). Если мы будем использовать эти методы, мы заранее знаем переменную какого типа мы получим.

Класс JFACTORY

Прежде чем перейти к Joomla! классу Factory, нам необходимо немного ознакомиться с изменениями, которые происходят в шаблонах кода.
Класс Factory используется для построения и возвращения объектов. Этот пример показывает, каким образом мы можем доступ некоторых глобальных объектов с использованием JFactory.

$db =& JFactory::getDBO();
$user =& JFactory::getUser();
$document =& JFactory::getDocument();

Сессии

Сессии используются в веб-приложениях, как средства, обеспечивающего временное хранение объекта в течение всего визита клиента. В PHP для этого мы использовали глобальной хэш $ _SESSION. Joomla! всегда дает нам возможность обращение к сессии, независимо от того, вошел ли клиент в систему Joomla! как зарегенный или нет. Вместо хэша $ _SESSION, мы используем глобальную сессию в виде объекта. Данные хранятся в определенном пространстве имен. По умолчанию используется пространство имен default. В этом примере мы извлечем значение default.example:

$session =& JFactory::getSession();
$value = $session->get('example');

Если мы хотим использовать определенное пространство имен, то мы должны также указать дополнительное значение. В этом примере мы извлечем значение myextension. По-умолчанию установим значение null:

$session =& JFactory::getSession();
$value = $session->get('example', null, 'myextension');

Установка значений очень похож на получение значений. В этом примере мы установили значение myextension.example -1:

$session =& JFactory::getSession();
$session->set('example', 1, 'myextension');
Интересная статья? Поделись ей с другими: