PHP статьи и уроки PHP для начинающих. Уроки по PHP.
Работа с массивами, графикой, звуком, базами данных.
Работа с протоколами на сервере HTTP и FTP.
Приветствую Вас, Гость!

Меню сайта
Категории каталога
Другие возможности PHP
Интересные возможности языка PHP, работа с другими языками, внедрение других технологий
PHP и базы данных
Взаимодействие PHP с различными базами данных, включая MySQL, SQLite, PostgreSQL, Oracle, и.т.п.
Работа с переменными
Статьи, посвященные работе с переменными PHP, датой и временем, и.т.п.
Работа с файловой системой
Приемы и методы взаимодействия с файловыми объектами
Работа с графикой и мультимедиа
Вопросы работы с графикой и мультимедиа средствами PHP, изображение, звук
Работа с протоколами HTTP и FTP
Статьи по принципам работы с протоколами HTTP и FTP, включая мехамизмы Cookie и Сессий
Работа с электронной почтой
Работа с электронной почтой средствами PHP
Интересное:
Реклама:
Смотрю "Записки о MacBook и Mac OS", в блоге gamedev программиста.
Главная » Статьи » Статьи » Другие возможности PHP

.NET без ASP.NET или как использовать технологию Microsoft средствами 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 работает удивительно стабильно.

В этой статье мы расскажем как можно сочетать все лучшее, что предлагают две технологии: мы будем программировать на 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:

<?php
$random 
= new DOTNET('mscorlib''System.Random');
?>

Соответственно mscorlib - это идентификатор Asssembly, а System.Random - имя нужно класса. Полный список идентификаторов Assembly вы можете найти в документации по .NET. (поставляется вместе с .NET Framwork SDK, который к тому же включает версию .NET Framework размером 100 мб с объемной документацией и дополнительными инструментами). Есть другой путь: для ASP.NET существует бесплатный редактор. Он относится к группе программ, называемых IDE, и поэтому содержит такую полезную функцию как ClassBrowser. Там перечислены все классы .NET Framwork, а так же идентификаторы Assembly.


Рисунок 1. ClassBrowser информирует: System.Random находится в mscorlib

Вернемся к нашим баранам, то есть к программированию. Объект, создаваемый DOTNET() ведет себя как соответствующий .NET класс, методы и свойства которого находятся в вашем распоряжении. Применительно к классу random это означает следующее: метод Next() создает новое (следующее) случайное число. Вот небольшой листинг, где генерируются и выводятся на экран три случайных числа


Рисунок 2. Три случайных числа, полученных с помощью .NET

<?php
$random 
= new DOTNET('mscorlib''System.Random');
$random_numbers[] = $random->Next();
$random_numbers[] = $random->Next();
$random_numbers[] = $random->Next();
echo 
implode(' '$random_numbers);
?>

Об ограничениях и о том, как их можно обойти

Как показывает рисунок два, вы получаете три числа, которые, по большей части, окажутся девяти или десятиразрядными. Это объясняется тем, что Next() возвращает целое положительное 32-битное число типа Integer, т.е. величину от 0 до 2147483647. Задать точный интервал в .NET можно, если методу Next() передать в качестве параметра:

  • верхний предел (в таком случае нижняя граница автоматически определяется как 0)
  • верхний и нижний предел

К сожалению, здесь чувствуются ограничения самого PHP, поскольку последний не поддерживает перегрузку, то есть в том случае, если определены методы с одинаковыми именами, всегда будет вызываться первый. Если вы попытаетесь при вызове метода Next() передать ему один или два параметра, - получите сообщение об ошибке (рис 3)


Рисунок 3. К сожалению, перегрузка невозможна (перевод немецкого текста в сообщении об ошибке - недопустимое число параметров)

Поэтому верхний и нижний предел генерируемого случайного числа определить довольно-таки затруднительно. Для этого вы должны провести некоторые преобразования. Но об этом немного позже!

Пока мы приведем другой пример. Технология .NET (класс System.Collections) предоставляет серию полезных компонентов, таких как различные виды массивов и списков: ArrayList, Hashtable, Queue, Stack и другие. Их также можно задействовать . Приведем пример с использованием ArrayList Эта структура представляет собой массив, в который вы можете поместить абсолютно любой элемент. Поскольку все языки .NET типизированы, эта возможность выгодно отличает ArrayList от обычных массивов, которые могут содержать элементы только одного типа. Перечислим важные методы и свойства ArrayList:

  • Метод Add() добавляет элемент в массив
  • Свойство Count содержит информацию о количестве элементов массива
  • Свойства Item возвращает элемент массива, индекс которого указывается в круглых скобках.
  • Sort() сортирует элементы массива

Следующий листинг создает объект класса ArrayList, наполняет массив значениями, сортирует их и выводит через цикл for. Мы задействуем все описанные выше методы и свойства:

<?php
$list 
= new DOTNET('mscorlib''System.Collections.ArrayList');
$list->Add(31);
$list->Add(23);
$list->Add(42);
$list->Sort();
for (
$i 0$i $list->Count$i++) {
echo 
$list->Item($i) . ' ';
}
?>

Практика

После теории идет практика. Приведем один маленький пример, который связывает два представленных выше листинга. Используя технологию .NET, мы сгенерируем случайные числа и поместим их в массив. С помощью класса random мы создадим 6 различных чисел от 1 до 49, отсортируем их и выведем на экран. Самая большая трудность заключается в установлении верхнего предела 49. Вспомним, что метод Next() класса System.Random возвращает значение от 0 до 2147483647. Если разделить полученное число на 2147483648, результатом этой операции будет значение от 0 (включительно) до 1 (не включая). Затем умножим его на 49, в результате получается число от 0 (включительно) до 49 (не включая). Вызов функции intval() поможет привести полученное число к целому типу. В итоге, у нас получется целое число от 0 до 48 (включительно). Прибавим к нему единицу, и тогда у нас получится желаемый результат от 1 до 49. Это относительно сложный путь, однако сколько умственных сил было потрачено! Этот код вы можете взять на заметку.

$random = new DOTNET('mscorlib', 'System.Random');
$random_number = $random->Next();
$random_number = intval(49 * random_number / 2147483648) + 1;

Перед тем, как обновить содержимое массива, вы должны учесть, что он должен содержать разные числа. Необходимую проверку можно выполнить с помощью .NET: класс ArrayList имеет метод Contains(), который действует также как и PHP-функция in_array().

$numbers = new DOTNET('mscorlib', 'System.Collections.ArrayList');
if (!$numbers->Contains($random_number)) {
$numbers->Add($random_number);
}

Дальше все просто. С помощью цикла while мы наполняем массив случайными числами до тех пор, пока свойство Count не будет равно 6. После сортировки (метод Sort), прогоняем массив через цикл и выводим значения на экран (см. листинг 1)

<?php
$numbers 
= new DOTNET('mscorlib''System.Collections.ArrayList');
$random = new DOTNET('mscorlib''System.Random');

while (
$numbers->Count 6) {
$random_number  $random ->Next();
$random_number intval(49 $random_number 2147483648) + 1;
if (!
$numbers->Contains($random_number)) {
$numbers->Add($random_number);
}
}
$numbers->Sort();

for (
$i 0$i $numbers->Count$i++) {
echo 
$numbers->Item($i) . " ";
}
?>


Рисунок 4.

PEAR и .NET

К сожалению, в PEAR нет класса подобного тому, что используется в .NET-расширении PHP5. Однако Стерлинг Хьюз написал похожее расширение для PECL, которое работает с OpenSource вариантом .NET - Mono. Вам необходимо установить само приложение Mono, а так же скачать самую последнюю версию Mono-расширения с домашней страницы проекта [6]. Распакуйте tgz-архив в подкаталог с расширениями исходников PHP, затем скомпилируйте PHP снова:

./buildconf
./configure --with-mono

Через некоторое время процесс компиляции завершится, тогда вы можете пользоваться расширением Mono, которое работает так же , как и .NET-расширение PHP. Единственная разница заключается в том, что в конструктор требует в качестве параметра только имя класса. Идентификатор Assembly не нужен.

<?php
$random 
= new Mono('System.Random');
$random_number[] = $random->Next();
$random_number[] = $random->Next();
$random_number [] = $random->Next();
echo 
implode(' '$random_number);
?>

Подробную информацию о расширении Mono, а так же несколько примеров, можно найти на сайте Стерлинга Хьюза [7].

Ограничения

.NET-расширение PHP5 выглядит очень практичным, если вы хотите интегрировать .NET-Business-Logic в приложения PHP. Но, к сожалению, оно еще не закончено. Многие операционные системы не поддерживают .NET-расширение, к тому же выполнение некоторых кодов приведет к странным сообщениям об ошибках, например «недостаточно места», а документация недостаточно объемна. В итоге, мы получаем интересную, но недостаточно совместимую, площадку для экспериментов.

Христиан Венц - автор книг, преподаватель и консультант. Его конек — Web-технологии. В серии статей «x без x» он регулярно рассказывает о скрытых возможностях PHP. Более подробную информацию по теме, вы можете найти в книге «PHP5 Kompendium», которую Христинан написал совместно с Тобиасом Хаузером.



Источник: http://www.softtime.ru/info/articlephp.php?id_article=63
Категория: Другие возможности PHP
Просмотров: 2355 | Комментарии: 1
Всего комментариев: 1
1  
прошу прощения за неотступность. давнёшенько выискивал вменяемое сочинение вкладов, их динамики. Для этих кто именно не осмысливает, это не так скромно. На горизонтах интернета без) (счету чего есть. Но вменяемой сведению о вкладах не так гибель.
дальше ссылка на статью. имеет возможность кому-то из вас пригодится.

Если не туда разместил пост переместите пожалуйста. Благодарю.
http://exchangeandwe.ru/ - Только у нас вы отыщете банковские вклады кои несомненно помогут вы и вашим наличным средствами

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright Viktor L.P. © 2017 Бесплатный конструктор сайтов - uCoz
down