- •Глава 1. Стр.6
- •Глава 2. Стр.19
- •2.3. Заключение: стр.36
- •Глава 3. Стр.37
- •Глава 4. Стр.49
- •4.2. Заключение: стр.60
- •1.3. Рассмотрение существующих технологий построения порталов.
- •Глава 1.
- •1.1. Цель и назначение разработанного сайта.
- •1.2. Целевая аудитория.
- •1.4. Заключение:
- •Глава 2.
- •2.1. Сравнение php и asp.Net
- •2.1.2. Очевидные преимущества asp.Net
- •2.1.3. Очевидные преимущества php
- •2.1.4. Сравнение возможностей: стратегический паритет
- •2.1.5 Провозглашаемые преимущества asp.Net: опыт критического анализа
- •2.1.6. За что я выбираю php
- •2.1.7. Подведём итоги
- •2.2. Сравнение MySql с другими субд
- •2.2.1. Сравнение MySql и mSql
- •Эффективность использования дискового пространства
- •Стоимость
- •Ограничения доступа
- •2.2.2. Сравнение MySql c PostgreSql
- •Глава 3.
- •3.1 Состав страниц:
- •3.2. Состав базы данных.
- •Графическая еr-модель
- •Функциональные зависимости
- •3.3. Таблицы
- •Заключение
2.1.6. За что я выбираю php
Не буду повторяться и говорить о доступности дистрибутивов и открытости кода. Также, как и обещал, постараюсь не быть предвзятым и приводить только те аргументы, которые можно проверить.
Кроссплатформенность. php портирован практически под все распространённые операционные системы, в то время как ASP.NET ориентирован на Windows, и то не всякую, а только 2000/XP/Vista/7. Т.е. мне не нужно беспокоиться, какая операционка стоит на сервере моего клиента.
Истины ради. Существует и развивается (не фирмой MIcrosoft!) проект Mono, призванный обеспечить полноценную работу системы .NET на базе свободного программного обеспечения. Но я бы не рискнул говорить об этом проекте как о надёжной технологии, на которую можно было бы делать ставку в серьёзных проектах. Кстати, Microsoft не несёт никакой ответственности, даже моральной, за то, как будет Ваш ASP.NET-проект работать согласно Mono.
А документация по данному проекту не добавляет уверенности. Вот что, например, она говорит об инструментах разработчика, предлагаемых Mono: No documentation available on this topic (по состоянию на 5 марта 2008 года). А ASP.NET без специальных средств разработки — это солдат без ружья.
Нет чрезмерной привязки к операционной системе. Даже под Windows php может устанавливаться простым копированием, не записывая ничего в многострадальный реестр, не требуя создания специальных групп пользователей и т.п. После переустановки операционной системы Вам не потребуется долго «поднимать» php и проекты, по ним написанные. Скажем, в Windows разумно установить Apache, php и MySQL на не-системном диске. Даже после форматирования системного раздела (C:) и установки Windows заново Вам потребуется не более трёх минут для восстановления: снова инсталлировать Apache как службу (командой apache -k install) и возобновить список виртуальных хостов (файл %System32%/drivers/etc/hosts). И всё, инцидент исчерпан...
ASP.NET взаимодействует с операционной системой (только Windows, и то не всякой) весьма тесно.
Хочу особо подчеркнуть преимущество, связанное со слабой зависимостью php от операционной системы: мне легко договориться с сисадмином фирмы-клиента.
Удачный набор функций. php предоставляет WEB-разработчику большое количество функций для решения типовых задач. Создатели php хорошо знают, какие задачи чаще всего решает разработчик WEB-приложений. В ASP.NET я не нашёл полезных функций, необходимых постоянно — при наличии огромного количества методов, которым и применения-то не придумать. Например, в WEB-приложениях часто проиходится очищать текст от тегов (это особенно актуально для форумов и гостевых книг), «квотить» строку для вставки в SQL-запрос, а также убирать этот квотинг при извлечении строки из SQL-запроса. php предоставляет нам эти функции (соответственно strip_tags(), addslashes() , stripslashes()), а вот в ASP.NET я не нашёл соответствующих методов. Разумеется, их можно реализовать на C#. Но я не настолько люблю работать...
Также отдельное спасибо авторам php за функцию var_export(). Этой функцией я легко получаю текстовое представление массива или объекта в тех случаях, когда отладчик был бы бессилен. Приведу пример: платёжная система методом POST отправляет на мою страницу данные об оплате. И если что-то идёт не так — мне легко послать самому себе текстовый дамп этого массива:
$dump=var_export($_POST,true); mail('tmanager@inbox.ru', 'post',$dump);
Увы, в ASP.NET придётся писать метод, который вернёт мне текстовое представление массива или объекта.
Таких примеров за годы моей практики накопилось много, но не буду Вас утомлять и перейду к следующему преимуществу.
Преимущества интерпретации. Кроме недостатков по сравнению с компиляцией, интерпретируемые языки имеют весьма ощутимые преимущества.
В первую очередь это возможность собирать и запускать на выполнение строку программного кода (функцией eval()), что даёт целый ряд возможностей. Например, сделать методики расчёта стоимости различных услуг данными, хранящимися в базе данных.
Также очень удобно, что, имея переменную, хранящую название другой переменной, свойства или метода – можно легко обратиться к переменной/свойству и вызвать метод.
Если переменная $a равна "b", то к переменной $b можно обратиться: $$a
Если переменная $a равна "p", то к cвойству p можно обратиться: $object->$p
Если переменная $a равна "m", то метод m можно вызвать: $object->$m()
Эти возможности мне нужны весьма часто, а использовать их, скажем, в C# затруднительно: приходится создавать unsafe-блоки для указателей на переменные (C# не очень хорошо приспособлен для работы с указателями), а для методов – сочинять классы-делегаты.
Прозрачная привязка проекта к файловой системе. И как следствие — нет необходимости в специальных средствах разработки (вроде Visual Studio). Иными словами, в php-проекте нет конструкций, для визуализации и редактирования которых требовался бы особый редактор.
Что же мы видим в ASP.NET? Не так уж просто сообразить, например, как связаны пространства имён (namespaces) и расположение файлов на диске. В итоге бывает, что классы не видят друг друга. Приведу пример.
Есть ASP.NET хостинг. Пытаемся (для экономии сил и времени) разместить два проекта на одном хостинге. В случае php никакой проблемы нет.
В случае же ASP.NET выясняется, что оба проекта начинают вести себя в папке хостинга, как на коммунальной кухне. Они желают иметь в корневом каталоге аккаунта свои файлы и папки — иначе страницы проекта как-то демонстративно не видят друг друга.
Простота настройки Apache, php,MySQL. Все настройки содержатся в тектовых ini-файлах. Все параметры откомментированы. И что особенно ценно: если чтьо-то идёт не так, Вы почти всегда получите сообщение, где ясно изложена проблема, указана строка ini-файла, которая «не понравилась». Есть, увы, исключения, но именно те, которые подтверждают правило: настройки и сообщения об ошибках LAMP понятны.
Несмотря на то, что продукт Visual Studio Express предлагается такой солидной корпорацией, как Microsoft, даже при попытке установки данного приложения возникают различные сбои:
В сравнении Visual Studio Express более надёжным и простым подходом, не требующим длительной установки и наладки программных сред, является разработка web-страниц на php.
Совместимость «снизу вверх».Переход php-проекта на новую версию php возможен либо вообще без изменений (именно этим мне запомнился переход с php 4.x на php 5.x), либо с минимальными доработками, связанными, как правило, с изменениями настроек по умолчанию (не буду долго останавливаться на том, что полагаться на настройки по умолчанию – дурной тон в программировании). А случае с ASP.NET (о переходе с ASP.NET 1.0 на ASP.NET 2.0) мы видим, что проект надо полностью переделать. Часть этой работы возьмёт на себя «колдун» (насколько хорошо он сработает – не проверял).
Простота формирования текстовых строк. Отдельное спасибо разработчикам php за:
возможность вставлять в двойные кавычки имена переменных и свойств:
$w='world';
print "Hello $w!"; //Напечатает Hello world!
или
$this->w='world';
print "Hello $this->w!"; //Напечатает Hello world!
возможность ввода большого текста с кавычками методом heredoc:
$html=<<<EOD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> new document </title>
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
EOD;
Жёлтым маркером отмечены делимитеры, в которые заключён текст.
