Краткое руководство по классам
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');
Краткое руководство по классам - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.