Главная страница | IT-студия |
|
Информационный портал
|
| Статьи о PHP | .NET без ASP.NET или как использовать технологию Microsoft средствами PHP .NET без ASP.NET или как использовать технологию Microsoft средствами PHPИсточник: http://www.php-mag.de/itr/online_artikel/psecom,id,763,nodeid,62.html Зеев Сураски утверждает, что ASP.NET не так уж плох… Однако не стоит беспокоиться, в этой статье мы не собираемся менять ваше отношение к той или иной технологии. Скорее наоборот, мы покажем как можно использовать компоненты .NET средствами PHP. Долгое время мы ничего не знали о том, что скрывается под странным буквосочетанием NET, о котором Microsoft впервые дала знать в 2001 году. Тем временем концепция уже стала известной: основным компонентом . NET является . NET Framework - мощная библиотека классов, функции которой рассчитаны на все случаи жизни. Программы .NET могут обращаться к библиотеке и пользоваться ее функциями. Однако здесь просматривается один существенный недостаток. Эта библиотека должна быть установлена у клиента, только тогда программы .NET смогут ей пользоваться. Следовательно для работы NET-Software необходимо установить .NET Framework. К счастью библиотека распространяется бесплатно и доступна через Windows Update (как опциональный компонент). Что бы не говорили, а технология . NET очень интересна. Даже такие известные и признанные разработчики PHP как Стерлинг Хьюз (Sterling Hughes) считают технологию . NET очень продуманной. Как показывает анализ блогов, выбор того или иного решения основывается не на свойствах конкретной технологии, а на выборе операционной системы. Сейчас . NET имеет большое преимущество, поскольку эта технология работает только на платформе Windows. Правда, существуют проекты типа Mono[1] и dotGNU[2] которые противостоят этому, однако их возможности намного отстают от решения Microsoft. Если Вы используете Unix/Linux, PHP - отличный выбор. Одно время под Windows можно было установить только (ASP).NET, однако журнал Netcraft-Studie (октябрь 2003) свидетельствует, что PHP для Windows работает удивительно стабильно [3]. В этой статье мы расскажем как можно сочетать все лучшее, что предлагают две технологии: мы будем программировать на PHP, используя функциональность . .NET. Сразу обратим внимание на одно ограничение: расширение PHP для работы с технологией . NET считается экспериментальным и пока еще содержит несколько багов и неприятных особенностей. Однако Ветц Фурлонг (Wez Furlong), разработчик, будет рад любой помощи. Для использования .NET-расширения вам понадобиться операционная система Windows с установленной библиотекой .NET Framework. К сожалению, вам не придется изменять php.ini, поскольку в системах Windows .NET-расширение запускается автоматически. Функция phpinfo() даст вам необходимую справку: ищите секцию com_dotnet, в ней должна быть запись .Net enabled. .NET и PHP.NET-расширение PHP очень просто в использовании. Вся прелесть заключается в том, что в распоряжении пользователя оказывается только один класс DOTNET. Его конструктор требует, наряду с именем класса , идентификатор Assembly. Понятие Assembly обозначает в .NET структуру, которая включает ресурсы (например используемые библиотеки), информацию о версиях, пространстве имен, ограничителях ресурсов. Вот простой пример, в котором инициализируется класс System.Random:
Соответственно mscorlib - это идентификатор Asssembly, а System.Random - имя нужно класса. Полный список идентификаторов Assembly вы можете найти в документации по .NET. (поставляется вместе с .NET Framwork SDK, который к тому же включает версию .NET Framework размером 100 мб с объемной документацией и дополнительными инструментами[4]). Есть другой путь: для ASP.NET существует бесплатный редактор[5]. Он относится к группе программ, называемых IDE, и поэтому содержит такую полезную функцию как ClassBrowser. Там перечислены все классы .NET Framwork, а так же идентификаторы Assembly. Рисунок 1. ClassBrowser информирует: System.Random находится в mscorlib Вернемся к нашим баранам, то есть к программированию. Объект, создаваемый DOTNET() ведет себя как соответствующий .NET класс, методы и свойства которого находятся в вашем распоряжении. Применительно к классу random это означает следующее: метод Next() создает новое (следующее) случайное число. Вот небольшой листинг, где генерируются и выводятся на экран три случайных числа Рисунок 2. Три случайных числа, полученных с помощью .NET
Об ограничениях и о том, как их можно обойтиКак показывает рисунок два, вы получаете три числа, которые, по большей части, окажутся девяти или десятиразрядными. Это объясняется тем, что Next() возвращает целое положительное 32-битное число типа Integer, т.е. величину от 0 до 2147483647. Задать точный интервал в .NET можно, если методу Next() передать в качестве параметра:
К сожалению, здесь чувствуются ограничения самого PHP, поскольку последний не поддерживает перегрузку, то есть в том случае, если определены методы с одинаковыми именами, всегда будет вызываться первый. Если вы попытаетесь при вызове метода Next() передать ему один или два параметра, - получите сообщение об ошибке (рис 3) Рисунок 3. К сожалению, перегрузка невозможна (перевод немецкого текста в сообщении об ошибке - недопустимое число параметров) Поэтому верхний и нижний предел генерируемого случайного числа определить довольно-таки затруднительно. Для этого вы должны провести некоторые преобразования. Но об этом немного позже! Пока мы приведем другой пример. Технология .NET (класс System.Collections) предоставляет серию полезных компонентов, таких как различные виды массивов и списков: ArrayList, Hashtable, Queue, Stack и другие. Их также можно задействовать . Приведем пример с использованием ArrayList Эта структура представляет собой массив, в который вы можете поместить абсолютно любой элемент. Поскольку все языки .NET типизированы, эта возможность выгодно отличает ArrayList от обычных массивов, которые могут содержать элементы только одного типа. Перечислим важные методы и свойства ArrayList:
Следующий листинг создает объект класса ArrayList, наполняет массив значениями, сортирует их и выводит через цикл for. Мы задействуем все описанные выше методы и свойства:
ПрактикаПосле теории идет практика. Приведем один маленький пример, который связывает два представленных выше листинга. Используя технологию .NET, мы сгенерируем случайные числа и поместим их в массив. С помощью класса random мы создадим 6 различных чисел от 1 до 49, отсортируем их и выведем на экран. Самая большая трудность заключается в установлении верхнего предела 49. Вспомним, что метод Next() класса System.Random возвращает значение от 0 до 2147483647. Если разделить полученное число на 2147483648, результатом этой операции будет значение от 0 (включительно) до 1 (не включая). Затем умножим его на 49, в результате получается число от 0 (включительно) до 49 (не включая). Вызов функции intval() поможет привести полученное число к целому типу. В итоге, у нас получется целое число от 0 до 48 (включительно). Прибавим к нему единицу, и тогда у нас получится желаемый результат от 1 до 49. Это относительно сложный путь, однако сколько умственных сил было потрачено! Этот код вы можете взять на заметку.
Перед тем, как обновить содержимое массива, вы должны учесть, что он должен содержать разные числа. Необходимую проверку можно выполнить с помощью .NET: класс ArrayList имеет метод Contains(), который действует также как и PHP-функция in_array().
Дальше все просто. С помощью цикла while мы наполняем массив случайными числами до тех пор, пока свойство Count не будет равно 6. После сортировки (метод Sort), прогоняем массив через цикл и выводим значения на экран (см. листинг 1)
Рисунок 4. PEAR и .NETК сожалению, в PEAR нет класса подобного тому, что используется в .NET-расширении PHP5. Однако Стерлинг Хьюз написал похожее расширение для PECL, которое работает с OpenSource вариантом .NET - Mono. Вам необходимо установить само приложение Mono, а так же скачать самую последнюю версию Mono-расширения с домашней страницы проекта [6]. Распакуйте tgz-архив в подкаталог с расширениями исходников PHP, затем скомпилируйте PHP снова:
Через некоторое время процесс компиляции завершится, тогда вы можете пользоваться расширением Mono, которое работает так же , как и .NET-расширение PHP. Единственная разница заключается в том, что в конструктор требует в качестве параметра только имя класса. Идентификатор Assembly не нужен.
Подробную информацию о расширении Mono, а так же несколько примеров, можно найти на сайте Стерлинга Хьюза [7]. Ограничения.NET-расширение PHP5 выглядит очень практичным, если вы хотите интегрировать .NET-Business-Logic в приложения PHP. Но, к сожалению, оно еще не закончено. Многие операционные системы не поддерживают .NET-расширение, к тому же выполнение некоторых кодов приведет к странным сообщениям об ошибках, например «недостаточно места», а документация недостаточно объемна. В итоге, мы получаем интересную, но недостаточно совместимую, площадку для экспериментов. Христиан Венц - автор книг, преподаватель и консультант. Его конек — Web-технологии. В серии статей «x без x» он регулярно рассказывает о скрытых возможностях PHP. Более подробную информацию по теме, вы можете найти в книге «PHP5 Kompendium», которую Христинан написал совместно с Тобиасом Хаузером. Блог автора статьи находится по адресу: www.hauser-wenz.de/blog/. Ссылки
|