Функциональное программирование и PHP. Личный опыт как доказательство: язык программирования PHP – главный в Сети

Язык программирования PHP - Учебный курс - Савельева Н.В. - 2006.

PHP, в настоящее время, – один из наиболее популярных языков для реализации веб-приложений. Данный курс посвящен изучению его основ. Акцент делается на практическое применение полученных навыков.
Язык PHP был создан для решения конкретной практической задачи в среде интернет (какой именно можно узнать, прочитав первую лекцию курса). Мы тоже постараемся не отвлекаться слишком сильно на теоретические рассуждения, и будем стремиться к решению какой-нибудь конкретной задачи в каждой из лекций. Большинство примеров взяты из реально существующей системы: виртуального музея истории информатики. Первая часть курса посвящена изучению основ синтаксиса и управляющим конструкциям. После этого рассматривается технология клиент-сервер, как основная сфера приложения языка PHP. Затем переходим к изучению наиболее полезных на наш взгляд встроенных функций и решению с их помощью практических задач. Хотя объектная модель в языке PHP не самая богатая, ее принципиальное наличие позволяет естественным образом описывать объектные модели данных. В качестве базовой модели будет рассмотрена модель документа виртуального музея информатики. После этого будет рассмотрен ряд прикладных аспектов: работа с файловой системой, с БД, строками, сессиями, DOM XML - все это позволит рассмотреть ключевые задачи практического использования языка.

PHP, MySQL для начинающих - Энди Харрис - 2005.

Эта книга поможет вам научиться программировать на РНР и создавать базы данных на MySQL. Если вашей целью является написание программ для веб-серверов, то эта книга для вас. Вы узнаете все основные концепции языков программирования, в частности, изучите команды и синтаксис языка РНР. Вы также узнаете, как в современных средах используются данные, кроме всего этого, также обучитесь самому процессу программирования.


Скачать и читать PHP, MySQL для начинающих - Энди Харрис

PHP - Обучение на примерах - Кухарчик А.

PHP - Обучение на примерах - Кухарчик А. - 2004.

Просто и доступно изложены основы РНР - популярного языка написания скриптов для Web-страниц. Выполняя несложные примеры, читатель сможет освоить азы программирования на РНР, создать динамическую страницу, счетчик посещения сайта, систему голосования, адресную книгу, Интернет-магазин. Описаны типичные ошибки использования сценариев, а также пути их исправления. Книга содержит фрагменты кода, который можно применять при создании собственных проектов.

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

Сегодня многие говорят о функциональном программировании, но не каждый сможет с уверенностью сказать, что следовал всем принципам данного способа написания программ. Главной причиной этому является наше однонаправленное мышление и обыкновенное незнание. В этой статье мы разберём основные принципы функционального программирования на PHP.

Важные аспекты функционального программирования

Начнём с терминов. Википедия определяет функциональное программирование как “парадигму программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних”. В данном способе программирования главным объектом манипуляции являются функции, в то время как в императивном программировании главным принципом является последовательное выполнение команд для достижения желаемого результата.

Когда я сказал, что главным объектом манипуляции являются функции, я имел в виду, что с ними мы можем делать всё, что угодно: передавать как аргументы в другие функции, определять функции в функциях, использовать функции в качестве возвращаемых значений! В общем, кругом одни функции.

Теперь давайте подойдём ближе к некоторым особенностями функционального программирования.

Неизменность

Свойством неизменности обладают значения, которые не могут быть изменены. В PHP и многих других языках их называют константами.

Рекурсия

Рекурсия - это один из часто используемых приёмов в функциональном программировании. При императивном подходе, для прокрутки по массивам мы можем воспользоваться циклами for или foreach, записывая текущее значение во временную переменную. Из-за принципа “неизменности”, данный подход неприемлем для функционального программирования.

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

Если массив пустой, то сумма элементов будет равна 0. В случае если в массиве больше элементов, мы применяем рекурсию.

Чистые функции

Если функция никаким образом не меняет значения переменных, которые находятся за её пределами и не осуществляет действия по вводу/выводу данных в файл, базу данных и т.д., то такую функцию можно назвать чистой.

Возвращаемое значение чистых функций будет всегда одинаковым для одного и того же набора входящих параметров. В этом случае, мы можем не переживать за работоспособность программы в целом, если заменим вызов чистой функции на вычисленное значение. Все математические функции - это чистые функции, в то время как функции работы с датой и rand() - нет.

Функции высших порядков

Если чистые функции можно реализовать практически при любом подходе, функции высшего порядка - это очень характерная отличительная черта функционального программирования. Особенностью функций высших порядков является то, что они могут принимать в качестве аргументов и возвращать другие функции. В PHP - это лямбда функции и замыкания.

Лямбда функции

Лямбда функции (также известные, как анонимные функции) - это ничто иное, как функции без названия. Работа с подобными функциями осуществляется через переменную, которой данная функция была присвоена.

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

$("#myButton").click(function () { // do something });

Приведённый фрагмент кода - это ничто иное, как создание анонимной функции.

В PHP лямбда функции появились в версии 5.3:

Когда речь идёт об анонимных функциях, очень важно понимать область видимости переменных. К примеру, в JavaScript анонимные функции имеют доступ к переменным за их пределами, а в PHP - нет.

Замыкания

Иногда всё же возникает необходимость иметь доступ к какой-то переменной, которая находится за пределами анонимной функции, но не является входящим параметром. Для того чтобы получить доступ к подобным переменным, можно воспользоваться замыканиями, используя ключевое слово use:

В этом случае, мы не передаём переменную как входящий параметр функции, а получаем к ней доступ, используя use.

Каррирование и частичное применение

Функции частичного применения - это функции содержащие другие функции, которые работают с набором аргументов родителя.

В PHP мы можем создавать подобные функции при помощи замыканий. Ниже вы можете найти пример вычисления объёма коробки. Все аргументы являются необязательными. Однако, если передать меньше 3х параметров, то запустится ещё и другая внутренняя функция.

В первой проверке мы проверяем количество аргументов. Если оно равно 3, то возвращаем результат. Если изначальное количество аргументов меньше, вызываем другую функцию, которая пытается найти решение с заданными данными.

Таким образом, мы можем вычислить размер коробки, передав сначала один аргумент, а потом и другие.

Каррирование - это специальный вид функции частичного применения, когда каждый аргумент может быть принят в отдельную функцию. Что-то типа f(x,y,z) to f(x)(y)(z). В PHP такой синтаксис невозможен, но реализовать принцип можно.

Плюсы и минусы

В использовании функционального подхода есть множество плюсов. К примеру, анонимные функции можно использовать в качестве функций обратного вызова. Как в фрэймворке Slim:

get("/home", function () { // show home page });

В данном примере, анонимная функция запустится, когда пользователь зайдёт по адресу home.

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

Однако стоит заметить, что не все приёмы данной парадигмы можно реализовать в PHP. В качестве примера, можно привести работу с параллельными процессами.

Также не всегда можно определить сложность рекурсивной функции и её эффект на производительность кода. Иногда стоит отойти от функционального принципа.

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

Итог

Функциональное программирование - это больше, чем просто подход. Это больше способ мышления, причём вне зависимости от языка.

Язык программирования PHP на сегодняшний день является, определенно, самым популярным языком веб-разработки. Имеет как огромную армию почитателей, так и достаточно большое количество недоброжелателей (в особенности представителей «серьезных» языков программирования, таких как Java, Python или Perl). Так или иначе, с его появлением процесс создания динамических веб-сайтов перестал быть уделом «избранных». В этом компасе представлены основные сведения о PHP для начинающих его изучать.

Что такое PHP? Краткая справка.

Для начала. Крупные интернет проекты, разработанные c помощью PHP

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

История возникновения.

Первые шаги. Что делать?

Вы решили начать изучать PHP, с чего начать? Сначала - прочитать руководство «самые основы» и «Хочу изучать PHP и Mysql. С чего начать?» Потом - установить PHP на вашем локальном компьютере. Дистрибутив PHP можно скачать с официального сайта (во вступительных статьях описан процесс пошаговой установки), или, проще - установить Денвер. Джентльменский набор Web-разработчика («Д.н.w.р», читается «Денвер») - проект Дмитрия Котерова , набор дистрибутивов (Apache, PHP, MySQL, Perl и т.д.) и программная оболочка, используемые Web-разработчиками для разработки сайтов на «домашней» (локальной) Windows-машине без необходимости выхода в Интернет. Главная особенность Денвера - удобство при удаленной работе сразу над несколькими независимыми проектами и возможность размещения на Flash-накопителе. Этот пакет имеет очень широкую известность в России, по некоторым данным, им пользуются 80% разработчиков на PHP. На сайте есть подробная инструкция по установке и настройке этого дистрибутива.

Самая простая программа на PHP



Пример

echo «Привет, я — скрипт PHP!»;
?>


Чем редактировать?

Изучаем дальше.

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

Появилась мысль рассказать Вам о языке PHP . Головной сайт разработчиков этого языка http://www.php.net , на нем Вы сможете скачать интерпретатор языка и узнать о языке практически все (для тех кто не боится английского).

Я не буду Вам ничего рассказывать о том кто, когда и зачем создал этот язык. Не все ли равно?! Если Вам интересно, то в интернете легко найдете информацию об этом. Скажу только, что это простой и очень мощный язык для создания динамических веб-страниц. Он специально разрабатывался для этого и поэтому любая работа с текстом и данными в любом проявлении на PHP делается легко и красиво.

Сейчас пока не будем ничего говорить о его настройке. Скорее всего Вы пользуетесь уже готовым хостингом с установленным PHP , поэтому его уже настроили за Вас. Квалификация и знания администратора сервера не известны, потому как его настроили трудно сказать. Этот шаг я хочу посвятить именно этому. Моя задача страшно напугать Вас, чтобы при разработке своих программ Вы боялись за всё. Интернет полон мошенниками, хакерами, ламерами и другими компьютерными сущностями:) Ваша программа должна уметь противостоять всем. Она должна справляться с ошибками настройки, которые допустил администратор, она должна адекватно обрабатывать мудреные запросы, которые пытается скормить ей хакер, или ошибочные запросы посылаемые другими. Проще говоря Вы должны научиться разрабатывать программы для Интернета на PHP так, чтобы они были готовы ко всему. Только так можно будет говорить о правильности работы, а главное безопасности ваших данных, сайта и возможно даже всего бизнеса.

Кратко попытаюсь сформулировать основные требования к хорошей программе на PHP , с которой будет мало проблем.

Первое - это встраивание программы в код HTML страницы. Думаю не секрет для Вас, что PHP файл - это обычный файл HTML со специальными вставками кода на языке очень сильно по синтаксису напоминающем С/С++ и Perl . Так вот вставки кода эти отделяются от HTML документа специальным символами начала кода и его конца ?> :

HTML документ

Hello world на PHP

"; ?>

Опять HTML документ

Знающие люди сразу спросят, а почему именно так? Ведь можно отделять короче, с помощью символов или <% %> .

А я отвечу, вы правы... Но вы заблуждаетесь:) И объясню почему. Такой стиль выделения кода задается специальными опциями в файле конфигурации, а именно опциями short_open_tag это для и опцией asp_tags для <% %> . Из начальной установки "на добро" я полагаю, что администратор настроил ваш PHP мизинцем левой ноги, поэтому не хочу полагаться на качество этой работы. Поэтому говорю просто "выкиньте это из головы", чтобы не обнаружить вдруг, что Ваш навороченный скрипт на PHP не работает вообще.

Второе - контроль ошибок кода. Если настроить интерпретатор PHP так, чтобы он контролировал все возможные ошибки, то Вы сразу же защитите себя от множества подводных камней. За эту настройку отвечают несколько опций error_reporting и display_errors . Первая из них контролирует "глубину" контроля ошибок, а вторая возможность отображения ошибок непосредственно в тело создающегося документа. Для нас продпочтительнее выводить все ошибки, независимо от того, как настроен PHP администратором. В этом случае мы будем получать предупреждение о любом изъяне уже на этапе разработки. Для того, чтобы установить свои значения этих параметров на время работы программы, существует функция ini_set() . Давайте попробуем два варианта программы.

Первый вариант:

Второй вариант:

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

Переменная $i=""

И во втором случае:

Переменная $i=" Notice: Undefined variable: i in /home/www.сайт/1.php on line 4 "

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

У параметра error_reporting есть еще одно значение E_STRICT , которое было введено в версии PHP 5 для еще большей проверки совместимости и работоспособности кода во время работы. Поэтому для совместимости с другими версиями напишем такой код:

")==1) { ini_set("error_reporting", E_ALL | E_STRICT); } else { ini_set("error_reporting", E_ALL); }; ?>

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



 

Пожалуйста, поделитесь этим материалом в социальных сетях, если он оказался полезен!