Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

Сравнение объектов


Вниманию читателей!

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

С предыдущими выпусками Вы можете ознакомиться:

  1. в архиве рассылки (оригиналы выпусков);
  2. на сайте рассылки (исправленные и дополненные версии).

# # #

Вы также можете подписаться на рассылку "PHP 5 для начинающих".

PHP 6 уже в разработке!

Еще в ноябре 2005 года на встрече в Париже разработчики обсудили новые возможности следующей, шестой, версии PHP. Интересует ли Вас, какой будет эта версия? Примите участие в опросе, который проводится на сайте рассылки.

http://pterodactyl.l2p.net/e107/

[опрос на английском языке: PHP 6: Are you interesting in? (PHP 6: Вы зантересованы?) - YES (ДА) - NO (НЕТ)]

PHP 5: Новые возможности.

The Pterodactyl

Copyright 2006 Pterodactyl's School

24.03.2006

История переиздания
Издание 1.00 24.03.2006
Первоначальная версия.

Аннотация

Подробно рассмотрены различия в сравнении объектов между PHP 4 и PHP 5. Продолжена разработка учебного приложения.


Сравнение объектов в PHP 4 и PHP 5 происходит по-разному (Пример 1, «Сравнение объектов в PHP 4 и PHP 5»). В частности, это связано с улучшенным механизмом копирования объектов в PHP 5. Так или иначе, но поведение сравниваемых объектов в PHP 5 в большей степени соответствует тому, которое можно было бы ожидать в рамках развитой объектной модели.

И PHP 4, и PHP 5 сравнивают объекты только одинаковых классов, проверяя названия переменных и их значения.

В PHP 4 равными считаются объекты, принадлежащие одному и тому же классу, обладающие одинаковыми наборами переменных с попарно равными значениями. При этом не имеет значения, при помощи какого оператора производится сравнение - обычного (==) или строгого (===).

В PHP 5 результат сравнения зависит от используемого оператора. При обычном сравнении все происходит таким же образом, как и в PHP 4. А вот при строгом сравнении объекты считаются равными в том, и только в том случае, если они ссылаются на одну и ту же область памяти (это возможно, например, если один объект перед тем был приравнен к другому).

С работой модифицированного варианта этого примера для PHP 5 на нашем сайте можно ознакомиться здесь.

Те, кто приобщился к информационным технологиям лет пятнадцать назад, наверное, помнят, как трудно было подружить тогдашнее программное обеспечение с русским языком. Приходилось редактировать исполняемый код приложений, после чего они переставали поддерживать английский язык; запускать какие-то резидентные программы, конфликтующие с операционной системой; или же прибегать к иным, не менее неуклюжим, приемам. Самое забавное, что "русифицированные" таким образом приложения зачастую становились менее понятными и удобными в использовании, чем оригинальные.

По мере присоединения к компьютерному сообществу все большего числа пользователей из различных стран остро встала проблема поддержки не только различных языков, но и национальных особенностей отображения даты, времени, используемых в той или иной стране единиц измерения и т. п. Современные приложения, как правило, поддерживают наиболее распространенные языки, а, главное, обеспечивают сравнительно легкую возможность добавления поддержки новых языков.

Потенциальная способность приложения поддерживать различные языки (и связанные с ними форматы даты и времени, телефонных номеров и почтовых адресов, единицы измерения, валюту и пр.) называется интернационализацией (internationalization, или сокращенно i18n, где 18 - количество пропущенных букв), а реализация этой способности к конкретному языку (стране) - локализацией (localization, или l10n).

Идеи интернационализации и локализации в полной мере распространяются и на веб приложения. Поэтому текущие и несколько последующих практических занятий будут посвящены внедрению этих идей в наше учебное приложение. К счастью, оба основных класса, используемых этим приложением - HTML_Page2 и HTML_Template_Flexy - уже поддерживают нужные нам механизмы, и нам остается только воспользоваться ими по собственному усмотрению.

До сих пор мы жестко задавали язык и кодировку генерируемой страницы в конструкторе класса SSSEx.

$attributes = array('language' => 'ru', 'charset' => 'windows-1251');

Такой подход нельзя назвать согласующимся с принципами интернационализации. Действительно, в его рамках для создания страниц на различных языках понадобилось бы разрабатывать отдельные классы для каждого языка (например, SSSEn для английского, SSSRu для русского и т. д.), а затем тратить на их синхронизацию больше времени, чем на саму разработку.

Более продуктивным представляется вынос установки языка и кодировки в отдельный метод (Пример 3, «Метод SSSEx::l10n») и вызов этого метода из конструктора. Заодно изменим способ задания аттрибутов и опций страницы в конструкторе (Пример 2, «Конструктор класса SSSEx»).

Внимание

Для этого придется изменить видимость (доступность) переменных attributes и options класса SSS c private на protected.

Поддерживаемые приложением пары 'язык - кодировка' вынесем в конфигурационный файл (Пример 4, «Конфигурационный файл config.ini»), чтобы при добавлении нового языка или изменении кодировки для существующего не редактировать каждый раз исходный код. В учебном примере ограничимся двумя языками - английским и русским, но при необходимости для подключения нового языка достаточно будет всего лишь добавить одну строку в секцию [i18n] конфигурационного файла (например, 'uk = windows-1251').

В качестве критерия выбора на первых порах воспользуемся первым из принимаемых броузером пользователя языков (переменная $_SERVER['HTTP_ACCEPT_LANGUAGE']). Если окажется, что предпочитаемого пользователем языка нет в списке, то сработают установки по умолчанию родительского класса HTML_Page2. В дальнейшем необходимо будет обеспечить более интеллектуальный анализ всех принимаемых броузером языков (а не только первого) и поддержку явного задания языка самим пользователем.

Подсказка

Для того, чтобы воспользоваться новой возможностью, необходимо в настройках броузера добавить русский язык в число принимаемых (если это не было сделано ранее) и поместить его на первое место (Move Up).

FireFox: Edit - Preferences - Advanced - Languages - Edit Languages....

MS Internet Explorer: Tools - Internet Options... - General - Languages.

Полный листинг текущей версии всех файлов, входящие в наш учебный пример, можно найти здесь.

Created with DocBook Created with Libxslt


В избранное