PHP в примерах PHP


Оглавление (нажмите, чтобы открыть):

Простые примеры php

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

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

Я постараюсь преподнести вам эти примеры в порядке возрастания их сложности.

Какая версия php у меня установлена

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

Посмотрите пример вывода информации данной функции, чтобы вывести подобное на своём сайте, создайте страницу с расширением .php и вставьте туда следующий код:

Время на сайте (сервере)

С помощью php легко узнать текущее время на сервере, например, во время загрузки на сервере было 17:08:57 09.11.2020, но в отличии от javascript это время не меняется онлайн, т.е. отображается то время, которое было на сервере в момент загрузки данной страницы.

Чтобы вывести дату на сайте нужно воспользоваться функцией date().

Маленькая хитрость: обычно в конце страницы ставят копирайт так Copyright © Computerlessons.ru, 2007 — 2020. Обратите внимание на вторую дату, она выводится с помощью php и в этом случае не нужно каждый год вручную подправлять число.

Как определить IP-посетителя

При написании скрипта для добавления комментариев неплохо бы кроме вводимых пользователем данных писать в базу данных ещё и его IP-адрес, мало ли пригодится. Узнать IP адрес пользователя можно с помощью функции getenv(‘REMOTE_ADDR’)

Ваш IP: 91.105.232.77

Вычисляем время выполения php-скрипта (загрузки страницы)

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

( ‘ST_T’ , microtime ()); //начало

Контент страницы, скрипты и т.п.

printf ( ‘Страница сгенерирована за %.5f сек.’ , microtime ()- ST_T ); //конец
?>

Для примера откройте главную страницу моего сайта, там внизу есть информация о том, сколько времени заняла загрузка страницы, подобная информация есть практически на всех страницах моего сайта. В среднем время загрузки не должно превышать 0,1 сек., если скрипт выполняется более чем за 0,5 сек, то вам стоит пересмотреть ваш скрипт. Время загрузки зависит не только от скрипта, но и от самого сервера, так на локальном компьютере скрипт может работать в разы быстрее, чем на виртуальном хостинге.

Подсветка php-кода

Вы наверное уже обратили внимание, что на этой странице я привожу примеры php-кодов в цветном варианте. Цветной код удобно читать, нежели чёрно-белый. Например, я мог бы показывать вам коды так:

Но всё же согласитесь, цветной код лучше! Выше я привожу вам пример функции highlight_file(), с её помощью можно выводить на страницу php-код из другого файла. Ниже посмотрите функцию highlight_string(), где можно раскрашивать код непосредственно на странице.

Маленькая поправочка: следите за ковычками внутри этих функций, если используете двойную ковычку «, то внутри используйте только одинарные ‘, если нужно использовать двойную ковычку, то её необходимо экранировать обратным слешем \». То же касается и одинарыных ковычек.

php-скрипт случайных чисел

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

В данном случае будет генерироваться случайное число от 1 до 100.

Список файлов из папки

С помощью php можно просканировать папку с файлами и вывести результат на экран, возможно вам пригодится это при создании всевозможных файловых хранилищ.

Вот вам пример работы этого скрипта:

Это файлы из папки с примерами к этой статье.

Какой размер файла

Если нужно узнать размер файла, например картинки, то воспользуемся функцией filesize(), она покажет нам размер файла в байтах.

Скачать файл скриптом

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

Если обратиться к файлу с таким скриптом, то начнётся скачивание файла file.zip из папки folder, но пользователь никогда не узнает из какой же папки происходит скачивание, а значит и не узнает его истиного пути, в нашем случае это http://сайт.ру/folder/file.zip

Вот вам живой пример, ссылка ведёт на страницу /lessons/php/14/load.html, но будет скачиваться файл, откуда, попробуйте догадаться.

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

Транслитерация слов с помощью php

Наверное не нужно объяснять зачем нужно транслитерировать русские буквы, это и так понятно.

Пример работы скрипта можно посмотреть в моих сервисах.

Код вы сможете без труда изменить на своё усмотрение.

Сканируем чужие сайты

Вот уж где находка вора, с помощью функции file_get_contents() вы можете открывать на своих страницах чужие сайты.

Злоупотреблять этой функцией не нужно, иначе можно доиграться!

Адрес сайта

С помощью функции $_SERVER[‘HTTP_HOST’] можно сказать пользователю на каком сайте он находится или использовать для подставновки в своих скриптах.

Результат: Вы находитесь на сайте computerlessons.mega8.ru

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

Основы работы с PHP

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

Введение в ООП

  • Урок №
    новая вкладка с new.code.mu
    Введение
  • Урок №
    новая вкладка с new.code.mu
    Свойства
  • Урок №
    новая вкладка с new.code.mu
    Методы
  • Урок №
    новая вкладка с new.code.mu
    Свойства и $this
  • Урок №
    новая вкладка с new.code.mu
    Методы и $this
  • Урок №
    новая вкладка с new.code.mu
    public private
  • Урок №
    новая вкладка с new.code.mu
    Конструктор
  • Урок №
    новая вкладка с new.code.mu
    Геттеры сеттеры
  • Урок №
    новая вкладка с new.code.mu
    Свойства только для чтения
  • Урок №
    новая вкладка с new.code.mu
    Один класс — один файл
  • Урок №
    новая вкладка с new.code.mu
    Объекты в массиве
  • Урок №
    новая вкладка с new.code.mu
    Начальные значения свойств в конструкторе
  • Урок №
    новая вкладка с new.code.mu
    Начальные значения свойств при объявлении
  • Урок №
    новая вкладка с new.code.mu
    Свойство из переменной
  • Урок №
    новая вкладка с new.code.mu
    Метод из переменной
  • Урок №
    новая вкладка с new.code.mu
    Метод сразу после создания
  • Урок №
    новая вкладка с new.code.mu
    Цепочки методов в классе
  • Урок №
    новая вкладка с new.code.mu
    Класс как набор методов
  • Урок №
    новая вкладка с new.code.mu
    Наследование классов
  • Урок №
    новая вкладка с new.code.mu
    Модификатор protected
  • Урок №
    новая вкладка с new.code.mu
    Перезапись методов родителя
  • Урок №
    новая вкладка с new.code.mu
    Перезапись конструктора родителя
  • Урок №
    новая вкладка с new.code.mu
    Передача по ссылке
    новая вкладка с new.code.mu
    . текст, код Клонирование объектов
  • Урок №
    новая вкладка с new.code.mu
    Использование объектов в другом классе
  • Урок №
    новая вкладка с new.code.mu
    Передача объектов параметрами
  • Урок №
    новая вкладка с new.code.mu
    Сравнение объектов
  • Урок №
    новая вкладка с new.code.mu
    Оператор instanceof
  • Урок №
    новая вкладка с new.code.mu
    Контроль типов
  • Урок №
    новая вкладка с new.code.mu
    Статические методы
  • Урок №
    новая вкладка с new.code.mu
    Статические свойства
  • Урок №
    новая вкладка с new.code.mu
    Объект со статическими свойствами и методами
  • Урок №
    новая вкладка с new.code.mu
    Константы класса
    новая вкладка с new.code.mu
    . текст, код Наследование и private
  • Урок №
    новая вкладка с new.code.mu
    . текст, код final
    новая вкладка с new.code.mu
    . в стек это Анонимные классы
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Полиморфизм

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов


  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

Продолжение еще следует

  • .
    по ООП еще много уроков будет, дописываю

В этом уроке мы разберем работу с данными на языке PHP.

Данные — это объекты, которыми может оперировать PHP, к примеру, сообщение пользователя — это строка, а его возраст — это число. Данные могут быть разных типов.

Строки и числа

Самыми простыми типами данных в PHP являются строки и числа.

Числа обозначают сами себя, например 1, 12, 145, а вот строки требуется брать в кавычки (одинарные или двойные — без разницы):

Числа также могут быть дробями. Разделителем целой и дробной части служит знак «точка». К примеру, число 10.754 — это дробь.

Переменные

Одним из самых главных и распространенных объектов в программировании является переменная.

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

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

В PHP перед переменной обязательно должен быть написан знак доллара $:

Операция присваивания

Очень важным элементом программирования является операция присваивания.

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

Комментарии

К коде PHP, так же, как и в HTML и CSS, можно оставлять комментарии, которые будут проигнорированы PHP при выполнении программы.

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

Комментарии могут быть многострочными и однострочными:

Функции

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

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

Параметры — это данные (например, строки или числа), которые мы даем функции, она производит над ними какие-то операции и возвращает нам результат.

Например, в PHP есть стандартная функция sqrt(), которая параметром принимает число, а возвращает квадратный корень этого числа.

То есть, если ей передать число 9, вот так — sqrt(9), то на выходе получим число 3. Полученное число мы можем записать в какую-либо переменную или вывести на экран.

Давайте найдем корень из 25 и запишем в переменную $a:

Функция echo

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

Следующий код выводит на экран заданный текст:

А в следующим коде переменной $text присваивается фраза, а затем содержимое этой переменной выводится на экран:

Математические операции

В PHP между числами и переменными можно совершать различные математические операции: сложение (знак +), вычитание (знак -), умножение (знак *), деление (знак /).

Чтобы понять, как с ними работать, посмотрите на следующий пример:

Можно сначала записать числа в переменные, а потом уже проводить операции с переменными:

А можно также одновременно производить операции и с числами, и с переменными:

Специальные значения

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

Значения true, false

Значения true и false обозначают истину и ложь соответственно. Они используются для таких вещей, которые предполагают два варианта ответа — да или нет.

К примеру, на вопрос ‘вам уже есть 18 лет?’ в можете ответить да, то есть true, или нет, то есть false.

Эти значения называются логическими.

Значение null

Значение null обозначает ‘ничего’. К примеру, если мы попробуем обратиться к переменной, которой мы еще не задали значение — то ее значение и будет null.

Функция var_dump

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

Например, если переменная является пустой строкой », то выведя ее содержимое на экран с помощью echo, мы ничего не увидим.

Вторая ситуация — когда переменная содержит строку с пробелами по краям, например:

Для решения описанных выше проблем следует использовать функцию var_dump(), которая предназначена для отладки кода и позволяет выводить значения переменных и их тип.

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

Пример использования var_dump():

PHP внутри HTML

PHP код можно вставлять внутрь HTML кода:

Сложение строк в PHP

В PHP, в отличие от многих других языков, строки складываются с помощью знака «точка»:

Получение определенного символа строки

В PHP можно получить доступ к определенному символу строки по его номеру таким образом: $a[n] – n-ный символ строки (учтите, что нумерация идет с нуля):

Сложности с операцией присваивания

Очень часто новички не понимают, что присваивание отличается от обычного равенства. Посмотрите следующий пример:

С точки зрения математики запись $a = $a + 2 абсурдна, но не с точки зрения программирования.

В данном случае переменная $a имела значение 1, а затем мы переменной $a присвоили новое значение — старое значение переменной $a плюс 2.

Операции инкремента и декремента

Операция $a++ или ++$a – увеличивает переменную $a на единицу. Эта операция называется инкремент.

Операция $a— или —$a – уменьшает переменную $a на единицу. Эта операция называется декремент.

Давайте посмотрим, в каких случаях проявляется разница между ++a и a++.

Пусть у нас есть код echo ++a и код echo a++.

В первом случае переменная сначала увеличится на единицу, а потом выведется, а во втором случае — сначала выведется, а потом увеличится.

Операции +=, -=, *=, /=

Мы уже рассматривали код, который демонстрирует сложности с операцией присваивания:

В данном случае мы присваиваем переменной $a ее текущее значение, увеличенное на 2. Однако PHP позволяет записать этот код еще короче с помощью оператора +=:

Кроме того, существуют операторы -=, *=, /=, которые эквивалентны следующему коду:

Операция .=

Существует также операция .=:

Типизация переменных

Что будет, если попробовать сложить, к примеру, число и строку, вот так: 3+’3′? В результате вы получите число 6. Это значит, что PHP автоматически осуществляет преобразование типов при необходимости, вам не нужно за это переживать.

То же самое случится, если, к примеру, сделать так: 3+true или 3+false. Попробуйте эти примеры сами и узнайте к чему преобразуется true в этом случае, а чему — false.

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Когда все решите — переходите к изучению новой темы.

Примеры использования рекурсивной функции в php

Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя. Другими словами, рекурсия — это вызов функции внутри самой себя.

Простой пример рекурсии в PHP.

Ниже показан примитивный пример использования рекурсии. По сути, ничего полезного данный код не делает. Более того, такой скрипт (бесконечный) переполнит стэк и аварийно завершит свою работу. Мы получим ошибку: Fatal error: Uncaught Error: Maximum function nesting level of ‘256’ reached, aborting! .

Более полезный пример использования рекурсии

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

Факториал — произведение всех целых чисел, меньших или равных данному числу.

Факториал числа так же можно вычислить, применив цикл, полностью заменяющий рекурсию:

Пример функции для защиты от XSS

Практически все данные (за редким исключением) из форм необходимо, во избежания XSS, пропускать через функцию htmlspecialchars() . Наша задача написать такую функцию, которая будет принимать массив (включая вложенные массивы) всех входящих данных и «прогонять» эти данные через встроенную функцию php htmlspecialchars() . И как раз здесь мы будем использовать рекурсию.

Дерево категорий

В данном примере выведем дерево категорий, используя рекурсивный метод, написанный в ООП стиле программирования. В базе есть таблица category с несколькими записями.

Для работы с базой данных я буду использовать PDO.

Далее я создам класс Category :

Выводим дерево категорий:

Основы создания дерева категорий почитать можно здесь.


Код сайта на php

Здравствуйте уважаемые начинающие веб мастера.

В этом уроке я покажу вам готовый код сайта на php, подробно расскажу что и как работает и, как вы увидите — это совсем не сложно.

Мы уже разобрали самые простые варианты сайтов на чистом html (табличная вёрстка) и html+css (блочная вёрстка).

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

В качестве рабочего материала мы будем использовать уже имеющийся у нас код сайта html+css блочной вёрстки, хотя, как вы скоро увидите, точно так же можно использовать и табличную вёрстку.

Вот этот код, только уже без комментариев и со слегка сокращённым контентом.

hr width =» 50 » color =» #037FFC » size =» 5 «>
h3 >Другая информация /h3 >
/div >
————————————————————————
div id =» content «>
img class =» left » src =» http://trueimages.ru/img/81/90/b1718f15.png «>;
h3 >Наша работа /h3 >
p >Здравствуйте уважаемые будущие веб-мастера! /p >
p >Здесь«разжеваны» все мелочи сопровождающие создание сайта. /p >
p >Этот сайт будем писать на php. /p >
/div >
div class =» clear «> /div >
—————————————————————————

div id =» footer «>
p class =» fon «> strong >Телефон: br > 265-48-76 /strong > /p >
p class =» fax «> strong >Факс: br > 265-85-97 /strong > /p >
p class =» mail «> strong >E-mail br >ctoto@mail.ru /strong > /p >
/div >
/div >
/body >
/html >

Это html файл, созданный в Notepad++, в кодировке utf8, и если открыть его в браузере, то мы увидим вот такую картинку.

Вот тут очень важный момент — эта картинка будет основным шаблоном всех страниц сайта.

В дальнейшем менять расположение блоков или добавить блок, горизонтальное меню например, будет весьма затруднительно, поэтому на этом этапе нужно определиться — сколько у вас будет колонок и блоков и как они будут расположены.

Следующим шагом займёмся созданием директории сайта.

В директории первым делом создадим три папки с названиями images для картинок, PHP , CSS и файл .htaccess.

Мастер Йода рекомендует:  Как установить и редактировать домашнюю страницу в WordPress

В файл .htaccess пропишем следующий код

Если кто-то ещё не знает как создаётся файл, читайте об этом здесь.

При сохранении такого файла в названии файла пишется только расширение .htaccess.

Пару слов о картинках.

В данном коде все картинки находятся на стороннем сервере trueimages.ru. Картинки вашего сайта вы будете складывать в папку images, значит их адреса будут иметь следующий вид

Но это в дальнейшем, а пока, на период тестирования, можно пользоваться trueimages.ru.

Затем скопируем все стили из шаблона страницы, вставим в Notepad++ и сохраним файл с названием style в расширении .css и кодировке utf8.

И на будущее — все файлы, особенно с расширением .php, должны сохранятся в utf8.

Файл style.css загружаем, или копируем, в зависимости от того, какой сервер вы используете, в папку CSS , а в шаблон страницы, в тег head , прописываем подключение этого файла.

И сразу пропишем тег description

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

Удаляем стили непосредственно со страницы и теперь шаблон, назовём его сразу index.html , у нас будет иметь вот такой вид.

hr width =» 50 » color =» #037FFC » size =» 5 «>
h3 >Другая информация /h3 >
/div >
————————————————————————
div id =» content «>
img class =» left » src =» http://trueimages.ru/img/81/90/b1718f15.png «>;
h3 >Наша работа /h3 >
p >Здравствуйте уважаемые будущие веб-мастера! /p >
p >Здесь«разжеваны» все мелочи сопровождающие создание сайта. /p >
p >Этот сайт будем писать на php. /p >
/div >
div class =» clear «> /div >
—————————————————————————

div id =» footer «>
p class =» fon «> strong >Телефон: br > 265-48-76 /strong > /p >
p class =» fax «> strong >Факс: br > 265-85-97 /strong > /p >
p class =» mail «> strong >E-mail br >ctoto@mail.ru /strong > /p >
/div >
/div >
/body >
/html >

Если всё сделано без ошибок, то открыв файл index.html в браузере, мы увидим изначальную картинку без каких либо изменений.

А вот теперь займёмся тем, ради чего мы здесь и собрались.

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

Начнём с самого верха. У нас в данный момент подключена только одна таблица стилей.

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

Значит создаём файл, например service и сохраняем его в расширении .php.

В этот файл копируем и вставляем уже имеющиеся подключения и заливаем его в папку PHP .

Раз подключение только одно, то весь файл будет иметь пока такой вид.

В дальнейшем, как я уже говорил, сюда добавятся ещё линки, возможно мета-теги и скрипты.

Тег description остаётся в шаблоне, так как он для каждой страницы индивидуален и описание в него вносится при заполнении этой страницы контентом.

Теперь идём в шаблон страницы index.html , удаляем имеющийся там линк, и вместо него прописываем следующий код

Начало страницы приобретёт вот такой вид

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

Достаточно будет зайти в папку PHP и сделать изменения в файле service

Проверим. Откроем страницу по адресу http://mysite.ru/index.html, должна опять открыться изначальная картинка, без каких либо изменений.

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

То есть страница может вообще не открыться.

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

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

Теперь принцип работы, надеюсь, понятен.

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

Исключение составит только блок со статьёй, так как каждая статья будет уникальной и её мы будем писать прямо в шаблоне страницы.

В результате у нас получится вот такой шаблон

html lang =» ru «>
head >
meta charset =» utf-8 » />
title >Код блочного сайта /title >
meta name =» description » content =» Описание страницы сайта » />

include ( ‘php/service.php’ );
?>
style >
/style >
/head >
body >
div id =» wrapper «>
div id =» header «>

include ( ‘php/header.php’ );
?>
/div >
————————————————————————
div id =» sidebar «>

include ( ‘php/sidebar.php’ );
?>
/div >
————————————————————————
div id =» content «>
img class =» left » src =» http://trueimages.ru/img/81/90/b1718f15.png «>;
h2 >Наша работа /h2 >
article >
p >Здравствуйте уважаемые будущие веб-мастера! /p >
p >Здесь«разжеваны» все мелочи сопровождающие создание сайта. /p >
p >Этот сайт будем писать на php. /p >
/article >
/div >
div class =» clear «> /div >
—————————————————————————

div id =» footer «>

include ( ‘php/footer.php’ );
?>
/div >
/div >
/body >
/html >

Очень компактно и удобно.

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

Значит можно брать этот шаблон, вносить в него название статьи (тег h2), вносить текст и картинки в статью (тег article), и создавать файл с названием по названию статьи, только латиницей, а если название статьи состоит из нескольких слов, то в названии файла они должны быть соединены тире или подчёркиванием, например

Вот так и создаются страницы самописного сайта. Затем они соединяются ссылками навигации, только это уже другая тема.

Но это ещё не всё.

Большой сайт не может состоять из одной корневой папки. У вас обязательно будут рубрики и даже подрубрики.

В корневой папке создаём папку с названием рубрики. Далее есть два пути

1. Создать для рубрики свой шаблон свою папку PHP и свой файл стилей.

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

2. Использовать основной шаблон, для всех страниц сайта, что более предпочтительно.

К тому же в любую страницу, будь она в рубрике или в корне, можно внести немного стилей в тег style , находящийся в теге head

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

Директория сайта будет иметь примерно такой вид

О том, как выложить сайт в интернет, читайте здесь

5 полезных примеров использования PHP

1. Генерируем CSV

Часто в разных проектах встречаются попытки конвертировать многоразмерный массив данных в CSV с помощью подобного кода:

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

Следующий код представляет логику для построения потока вывода в формате CSV из массива данных. Опциональные параметры служат для указания заголовков столбцов и определения цели потока данный CSV — непосредственно браузер или строка. Поток данных обрабатывается с помощью функции fputcsv() для которой требуется дескриптор открытого файла.

С помощью функции toCSV() генерирование данных a формате CSV будет простым и надежным процессом.

2. Автозагрузка классов

Файлы автозагружаемых классов обычно располагаются в общем месте. Но вам может не нравится раздутый каталог или тяжеловесные автозагрузчики, которые имеются в большинстве библиотек PHP, или есть желание использовать собственное решение. к счастью, возможно использовать собственный минимальный загрузчик, который будет соответствовать стандарту PSR-0.

Стандарт не описывает функционал, который должен обеспечивать совместимый с PSR-0 автозагрузчик (методы регистрации, опции конфигурации и так далее). Если он может автоматически находить определение класса по шаблону пути \ \( \) , то он соответствует PSR-0. Более того, нет жестких требований для директории шаблона . Дополнительным грузом большинства автозагрузчиков является соглашение о том, что нужно указывать расположение файлов в коде. Но в таком требовании нет необходимости, если просто используется директория в дереве включений PHP.

Магия данного кода заключается в использовании регулярного выражения, которое разделяет имя на составляющие части: имя класса попадет в $match[2] , а в $match[1] будет содержаться название пространства имен (которое может быть и пустой строкой).

3. Разбор данных с фиксированной длиной с помощью функции unpack()

В современном мире, наполненном данными в формате XML и JSON, может показаться, что данные с фиксированной длиной вымерли. что будет роковой ошибкой. Существует большой объем данных, которые используют формат с фиксированной длиной: некоторые журнальные записи, MARC 21 (библиографическая информация), NACHA (финансовая информация), и тому подобное. Поэтому приходится беспокоиться о поддержке работы с таким данными.

Работа с данными в формате с фиксированной длиной относительно просто реализуется в языках программирования, подобных С. Так как после загрузки в память, данные выравниваются в соответствующие структуры. Но в динамических языках программирования, подобных PHP, работа с такими данными превращается в тяжкий труд, результатом которого часто становится появление следующего кода:

Такой код слишком громоздок и уязвим для глупых, трудно выявляемых ошибок индексов. Но ему есть альтернатива: функция unpack() .

Описание функции unpack() гласит: “Распаковывает данные из бинарной строки в массив согласно заданному формату” и представляет несколько примеров использования для данных в бинарном формате. Не вполне очевидно, что данная функция может быть использована для работы с данными в формате с фиксированной длиной благодаря коду формата ‘A’, который представляет символ (любая строка является набором битов и байтов).

С помощью функции unpack() выше приведенный пример можно изменить следующим образом:

Строка формата в данном случае является серией кодов A, с указанием количества символов для соответствующего поля, и имени ключа для таблицы результата с разделением через слэш. Например, A6date соответствует 6 символам и будет доступно как $header[«date»] .

4. Шаблоны HTML

В сообществе PHP постоянно идут споры о шаблонах. Все соглашаются с тем, нужно разделять HTML и PHP, но столкновения начинаются в вопросах использования библиотек шаблонизаторов, таких как Smarty или Twig. Одни говорят, что PHP сам по себе является шаблонизатором и выдвигают аргументы о дополнительном синтаксисе, скорости библиотек и так далее. Другие указывают на преимущества расширения функционала серверного языка программирования. Компромисом может стать использование минимума классов PHP для собственного шаблона HTML.

Представленный код не является полноценной системой для создания шаблонов. Это все лишь вспомогательный класс для сбора пар ключ/значение, к которым можно получить доступ во включённом файле, назначенном в качестве шаблона. Сначала в виде создаем экземпляр класса Template , которому можно передать имя директории для поиска последовательных файлов шаблона (для группировки связанных файлов). Затем определяем значения, которые будут заполнять шаблон, с помощью метода set() или свойств. Как только значения указаны, можно вызывать метод out() для формирования шаблона.

Файл mytemplate.php для примера может иметь следующий вид:

В файле шаблона имеется доступ ко всем значениям.

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

5. Используем file_get_contents как альтернативу cURL

cURL — отличная библиотека для соединения через различные протоколы. Она имеет полноценный набор функций и может использовать для решения практически любой задачи коммуникации. Но основная часть каждодневного использования cURL в PHP связана с запросами HTTP GET и POST, и часто может быть легко заменена с помощью встроенных функций PHP.

Проблема использования cURL для запросов HTTP имеет два аспекта: 1) нужно устанавливать много опций, даже для простейшей транзакции; 2) она является расширением, которое может быть недоступно на сервере хостера.

file_get_contents() и stream_context_create() являются встроенными функциями PHP, доступными с версии 4.3. Они вместе могут быть использованы для выполнения большинства типов запросов, выполняемых через cURL.

Для основного запроса GET может использоваться сама функция file_get_contents() :

Для запросов, когда нужно указать заголовок HTTP, можно создать содержание с помощью специального массива в функции stream_context_create() и передать результат в функцию file_get_contents() .

Выше приведенный пример показывает загрузку файла с помощью запроса POST с массивом содержания, в котором необходимая для транзакции информация формируется с помощью ключей “method”, “header” и “content”.

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: phpmaster.com/5-inspiring-and-useful-php-snippets/
Перевел: Сергей Фастунов
Урок создан: 3 Июля 2012
Просмотров: 38677
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.


Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

PHP в примерах PHP

В этой статье:

  • Размещение PHP на HTML-странице
  • Комментарии в скриптах
  • Отображение текста
  • Переменные и константы в PHP
  • Оператор присваивания
  • О типах данных

Для написания кода на PHP подходит любой текстовый редактор (например Notepad++).

Размещение PHP на HTML-странице

Код скрипта PHP может размещаться непосредственно на HTML-странице. Чтобы узнать, как это делается, давайте рассмотрим следующий простой пример:

С первого взгляда пример напоминает обычный файл HTML. Единственное новшество здесь –– конструкция .

Все, что стоит между , интерпретируется как код на языке PHP. Здесь мы также видим пример использования команды echo –– одной из наиболее важных, часто используемых команд при программировании на этом языке. Команда echo применяется, когда необходимо что-либо написать в текущем документе. Так наша небольшая программа на PHP в HTML-документе выводит фразу “А это PHP”. Все что находится вне процессор РНР передает без изменения непосредственно на динамическую web-страницу.

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

Наш первый сценарий

Тексты сцеариев (php-программ) должны храниться в файлах с раширением php.

РНР-код состоит из отдельных операторов, каждый из которых завершается точкой с запятой (ее отсутствие вызовет сообщение об ошибке).

Первый скрипт на РНР (файл index.php) будет достаточно простым, но уже он продемонстрирует совместное использование HTML и РНР.

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

Данный текст можно набрать в любом текстовом редакторе, например, в NotePad++, и сохранить под именем index.php. Следует убедиться, что файл сохранен как php-файл, в противном случае он не будет корректно обработан РНР.

В случае локальной работы необходимо скопировать файл index.php в каталог документов web-сервера. Для Denver это home/localhost/www (если в настройках не указано иное). После чего можно переходить непосредственно к запуску скрипта.

Для запуска скрипта index.php следует открыть web-браузер, а затем ввести в адресной строке полный путь к этому скрипту. В случае локальной установки адрес будет таким:

Если все сделано правильно, на экране мы увидим:

Файл styles.css (таблица стилей):

Прямо из браузера мы можем просмотреть код этой странички, сформированный web-сервером:

Таким образом, имя переменной заменяется ее значением, которое помещается на то же место, где в программе стояло имя этой переменной.

Итак, PHP-файлы обычно представляют собой смесь HTML, CSS и РНР. При этом РНР-код всегда заключается внутри конструкции . Web-сервер посылает HTML-код браузеру без изменения. РНР-код выполняется, и если он формирует теги и какой-либо текст для отображения, этот текст вставляется на то место, где размещался РНР-код. Браузер интерпретирует HTML-теги страницы и отображает результат на экране.

PHP-код может располагаться в произвольном месте и многократно включаться в текст скрипта. С его помощью можно также формировать и HTML-теги, что видно из нашего примера.

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

Содержание PHP-скрипта представляет собой код на РНР или на HTML. Но есть также комментарии, которые предназначены для описания скрипта.

В РНР существует три типа комментариев. Первый позволяет располагать комментарии в нескольких строках, начиная их символами /* (записываются без пробела) и заканчивая символами */, например:

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

Многострочные комментарии могут оказаться полезными там, где надо вставить значительный объем текста. Кроме того, распространенным приемом при отладке программы является заключение части кода в комментарий (чтобы предотвратить его выполнение).

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

Очень часто комментарий добавляют в начало сценария, чтобы дать о нем краткую информацию и указать, какие функции он выполняет. Например:

Отображение текста

Оператор echo, который предназначен для отображения произвольного текста на web-странице, является, пожалуй, наиболее употребительным оператором РНР. В простейшем случае после echo следует поместить одну строку в кавычках. Текст может быть заключен как в двойные кавычки, так и в простые кавычки (апострофы). Для отображения чисел кавычки необязательны, например:

В общем случае после echo можно записать несколько строк для вывода, которые разделяются запятыми.

При необходимости длинная строка может быть размещена на нескольких строках в тексте скрипта, например:

Отдельные строки могут объединяться при помощи оператора сцепления «.» –– точка. В результате образуется единая строка, которая передается оператору echo. Например:

Для отображения кавычки следует разместить перед ней обратный слеш, например:

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

Отображение большого текста

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

Переменные, оператор присваивания

Как и в любом языке программирования, переменные предназначены для хранения данных. В РНР имена переменных всегда начинаются со знака доллара $, далее следует буква или знак подчеркивания, после которого может следовать произвольное количество букв, цифр или знаков подчеркивания. Следует помнить, что в именах переменных большие буквы и малые буквы различаются. Например, $var и $Var –– это разные переменные.

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

Переменная существует до тех пор, пока выполняется программа.

Для присвоения значения переменной в РНР используется оператор присваивания, обозначаемый знаком равенства =. Ниже приведены примеры операторов присваивания:

$message = “Доброе утро!”;

Обратим внимание, что одним переменным присвоены числа, а другим — строки.

Задание. Вывести все значения этих переменных в браузер: (1) каждое значение –– в новой строке; (2) –– все значения –– в одной строке.

Константы

Иногда не требуется менять в программе один раз заданное значение. Для этого используются константы — их значения не изменяются в процессе выполнения скрипта.

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

define (“PI”, 3.1415926535);

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

Константам нельзя давать имена, которые являются служебными словами языка РНР (так как перед именем константы не ставится знак доллара).

Зарезервированные (служебные) слова РНР:

and array as break default
die do echo endif endswitch
endwhile global if include print
require eval lnclude_onc e require_once return
case сfunction class const continue
declare else elseif empty enddeclare
endfor endforeach exception exit extends
for foreach function isset list
new old_function or php_user_filter static
switch unset use while xor

В языке РНР определено множество встроенных констант, которые можно использовать в сценариях. Эти константы начинаются с двух символов подчеркивания и заканчиваются тоже двумя символами подчеркивания. Например:

__CLASS__ __FILE__ __FUNCTION__ __LINE__ __METHOD__

Прерывание выполнения сценария

Наиболее часто для останова выполнения сценария применяется функция exit(). Другой полезной функцией является die(“Сообщение”), которая позволяет также вывести сообщение об ошибке. Это позволяет сообщить пользователю причину, по которой сценарий завершился неудачей.

Уничтожение переменной

Иногда требуется принудительно уничтожить переменную. Для этого предназначена функция unset().

Мастер Йода рекомендует:  Введение в мобильную разработку для Android с каких языков начать изучение

Если попробовать выполнить оператор echo “$variable” после вызова функции unset, то мы получим сообщение об ошибке –– переменная $variable больше не будет существовать.

Можно одновременно уничтожить несколько переменных:

Следующий текст при первом чтении можно пропустить

Типы данных

В языке РНР тип переменной определяется автоматически при создании переменной на основе ее значения. Тем не менее, следует иметь представление о типах данных, которые могут использоваться. Всего их восемь:

  • Логический тип, содержит значения TRUE или FALSE.
  • Целое число.
  • Вещественное число.
  • Текст произвольной длины.
  • Массив.
  • Объект.
  • Ресурс (например, файл).
  • NULL Значение NULL.

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

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

$int_variable = (integer) $variable;

$float_variable = (float) $variable;

$string_jyariable = (string) $variable;

При преобразовании в логический тип boolean, следующие значения преобразуются в значение FALSE.

  • Целое число 0.
  • Вещественное число 0.0.
  • Пустая строка и строка “0”.
  • Массив с нулевым количеством элементов.
  • Объект, не имеющий свойств.
  • Специальный тип NULL.

При преобразовании к типу целых значений другие типы преобразуются так:

  • Логическое FALSE преобразуется в целое число 0, логическое TRUE преобразуется в целое число 1.
  • Вещественные числа округляются в меньшую сторону. При преобразовании в вещественное число сперва осуществляется преобразование в целочисленное значение.

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

Любые другие значения, включая все ресурсы, преобразуются в TRUE.

Итоги

Язык РНР предназначен для создания динамических web-страниц.

  • Код РНР заключается между тегами .
  • Оператор echo предназначен для отображения текста.
  • Имеется возможность включать в код РНР большие блоки текста
  • В РНР используются три вида комментариев: /* … */, // и #.
  • Имя переменной предваряется знаком доллара $, начинается с буквы или знака подчеркивания, после которого может следовать произвольное количество букв, цифр или знаков подчеркивания.

Урок 2. Создаём первую страницу на PHP. Операторы вывода

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

О PHP скажу коротко — этот язык программирования используется по всему миру и на нём можно создавать сайты всех уровней сложности, от сайтов-визиток до крупных порталов. Думаю, уже для многих не секрет, что крупнейшие социальные сети facebook.com (с нуля на php) и vk.com (движок на php) были написаны на языке PHP. Так что делаем выводы и начинаем работу!)

Принцип работы кода

Код PHP отрабатывается на стороне сервера. То есть готовой страницы нет. Например, в коде дана команда собрать данные о том, сколько пользователей зарегистрировано на данный момент на сайте. Посетитель сайта нажимает на ссылку все пользователи. Он хочет получить динамические данные, то есть те, которые постоянно изменяются. После того, как подсчёт на сервере будет закончен, с сервера придут данные в виде сгенерированного HTML-кода страницы с количеством пользователей. В результате, после клика-запроса по ссылке, пользователь получает страницу. Если просмотреть код полученной страницы, то можно увидеть только HTML, а PHP-код будет недоступен для просмотра. Грубо говоря, PHP — это указания серверу по тому, как и из каких блоков сделать страницу.

Как выглядит PHP код и куда его вставлять?

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

Код PHP (файл index.php)

Демонстрация Скачать исходники
Результатом работы кода будет вывод обычного текста Привет, Мир!. Спросите зачем писать код php, чтобы вывести обычный текст? Оператор echo, о котором поговорим чуть позже, нужен не просто для вывода текста. Чаще echo используют для отображения результата работы какой-то функции, которая производила подсчёт или брала данные из БД ( Что такое База данных? ). То есть для отображения динамических данных.

Оператор echo в PHP

Как Вы уже поняли, оператор echo нужен для вывода данных. Содержимое (в нашем случае пока только текст) берём в кавычки, а в конце ставим точку с запятой ; это обозначает конец работы оператора.

В программирование при создании первой страницы принято употреблять фразу Hello, World! — то есть Привет, мир! Именно её и используем. В примере не будем использовать html, так как это не обязательно.

Код PHP

Программа выведет Привет, Мир!.
В самом первом примере мы вставляли в html небольшой код php. Теперь, наоборот, внедрим в php-код элементы html.

Код PHP

В результате получим пустую страничку с заголовком Привет, Мир!

Внимание! Обратите внимание на то, что третья строчка заключена в апострофы, а не в двойные кавычки. Во-первых, так нужно, если в отображаемом содержимом уже есть кавычки. Так оператор верно отобразит . Во-вторых, апострофы используются для того, чтобы данные в операторе echo отображались как есть, в том виде, в котором они и написаны.


Оператор print в PHP

В отличие от оператора echo, print выводит данные с учётом пробелов и переносов текста. Имеет некоторые ограничения — можно использовать только один аргумент, echo несколько. Отрабатывает дольше, чем echo. В дальнейшем будем прибегать к данному оператору при написании функций.

Текст будет выведен также, как и написан.

Оператор вывода — синтаксис heredoc PHP

Как Вы уже успели заметить, выводить страницу путём постоянного использования оператора echo — это некрасиво и нечитаемо. Поэтому для вывода больших частей html кода есть другой оператор вывода, использующего синтаксис heredoc. Он тоже выводит данные в таком же виде, в каком они и были (пробелы и переносы).

Чтобы скрипт не выдавал Вам ошибку, следите за тем, чтобы после echo 1. не содержать ни одного html-элемента. Страница и текст всё равно отобразятся. html нужен для красивой разметки содержимого.

2. быть как включен в html-код, так и содержать его внутри своих операторов вывода (echo, print и тд). Главное не забывать конструкцию

3. страницы с php-кодом должны иметь соответствующее расширение: .php .phtml

Со следующих уроков мы разберём основы создания сайтов на php, в которых увидите все плюсы использования данного языка!

Основы PHP

Основы синтаксиса

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

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

Когда пользователь обращается к скрипту в адресной строке браузера, набирая, например, http://localhost:8080/display.php, то веб-сервер передает его интерпретатору PHP. Затем интерпретатор обрабатывает код и генерирует на его основе html-разметку. И затем сгенерированный html-код отправляется пользователю.

Документ PHP может содержать как разметку html, так и код на языке php. Для перехода от разметки html к коду php используются теги , между которыми идет код php. Данные теги служат указанием интерпретатору, что их содержимое надо интерпретировать как код php, а не разметку html.

Также можно использовать краткую версию тегов: . Для этого в файле php.ini надо изменить значение short_open_tag = Off на short_open_tag = On

Рассмотрим простейший скрипт на php:

После обработки файла интерпретатор сформирует следующую разметку:

Здесь использованы две инструкции echo «

» и echo «2 + 2 = » . (2+2) , который выводят определенное значение на страницу. Каждая отдельная инструкция в PHP завершается точкой с запятой.

Комментарии

При создании веб-сайта мы можем использовать комментарии. Например, мы можем прокомментировать какое-либо действие, чтобы впоследствии иметь представление, что этот код делает:

Знак // предваряет однострочный комментарий, и все что идет после этого знака на одной строке, будет считаться комментарием и не будет выполняться интерпретатором. При обработке интерпретатор просто будет пропускать комментарии.

Если нам надо закомментировать несколько строк, то мы можем использовать многострочный комментарий /* текст комментария*/ :

Все строки внутри комментария также не будут обрабатываться интерпретатором.

Функции в PHP

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

Продолжение урока будет доступно вам
после покупки курса PHP для начинающих

Об авторе

Если вам интересно узнать
как я стал программистом,
читайте вот эту статью.

Сборник упражнений и задач по PHP

Пару слов о задачнике

Наш задачник по языку программирования PHP содержит стандартные упражнения и задачи с решениями на закрепление теоретических основ излагаемых в учебнике.

Если в ходе освоения учебного материала у вас возникнут трудности, пишите мне в индивидуальный ‘Чат с автором’ (по возможности стараюсь отвечать всем).

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

Оглавление задачника

§1.1. Введение в PHP

1. Создайте на локальном сервере Xampp в папке htdocs тестовую папку test , а в ней файл index.php . Для быстрого доступа к файлу создайте в браузере закладку, поскольку файл будет использоваться в дальнейшем для решения задач. Адресный путь к файлу должен иметь вид http://localhost/ test/ index.php .

2. Выведите на экран одна за другой четыре строки: ‘Всем ‘ , ‘привет ‘ , ‘от ‘ , ‘PHP!

‘ , используя для этого только один оператор echo . После данной инструкции напишите два однострочных комментария: ‘Для вывода слов на разных строках мы используем элемент «br» , т.е разрыв строки’ и ‘Переменные выводимые оператором echo перечисляются через запятую’. Далее измените код первой части так, чтобы слова после вывода на экран находились на разных строках. В самом конце нашего кода напишите многострочный комментарий: ‘После каждой инструкции мы будем ставить точку с запятой даже, если инструкция является последней в блоке php -кода’. Показать решение.

3. Создайте переменную, присвойте ей число 5 и выведите его на экран. Создайте вторую переменную, присвойте ей число 10 и выведите его на экран. Выведите на экран сумму, разность, произведение и частное от деления значения первой переменной на значение второй переменной. Присвойте сумму значений этих двух переменных третьей и выведите итог на экран. Теперь увеличьте текущее значение третьей переменной на величину значения второй переменной и выведите его на экран. И, наконец, увеличьте текущее значение третьей переменной в два раза и выведите его на экран. Показать решение.

4. Восстановите по комментариям php -код условия. Показать решение.

Условие задачи №4

5. Восстановите по комментариям php -код условия. Показать решение.

Условие задачи №5

6. Создайте переменную $a и присвойте ей значение 20 . Создайте переменную $b и присвойте ей значение 10 . Теперь создайте переменную $car и присвойте ей строку с именем первой переменной. Выведите на экран $ <$car>. Создайте еще одну переменную $track и присвойте ей строку с именем второй переменной. Выведите на экран $ <$track>. Показать решение.

7. Создайте переменную $n и присвойте ей строку ‘number’ . Теперь попробуйте вывести на экран строку ‘$a’ . Что нужно сделать, чтобы переменная, находящаяся внутри строки была правильно распознана интерпретатором PHP ? Исправьте код и выведите строку на экран повторно. Показать решение.

8. Посмотрите внимательно на условие задачи, в котором сделана попытка вывода значений переменных на экран. При попытке вывода каких из переменных интерпретатором будет выдана ошибка и почему? Показать решение.

Условие задачи №8

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

10. Создайте глобальную переменную $a и присвойте ей число 1 . Затем создайте пользовательскую функцию, внутри которой создайте локальную статическую переменную $b и присвойте ей число 0 . Далее увеличьте текущее значение локальной переменной $b на величину значения глобальной переменной $a , т.е. прибавьте к текущему значению переменной $b значение глобальной переменной $a . Добавьте инструкцию вывода значения переменной $b на экран. После создания функции вызовите ее три раза и объясните результат. Показать решение.

11. Имена каких из переменных, указанных в условии, заданы неверно? Почему? Показать решение.

Условие задачи №11

12. Создайте две константы, использовав для этого функцию define() и служебное слово const . Выведите их значения на экран. Создайте пользовательскую функцию, которая будет создавать константу в локальной области видимости этой функции. Получится ли создать константу при помощи служебного слова const ? Осуществите вызов созданной функции. Выведите значение константы, созданной после вызова функции, на экран. Вызовите функцию еще раз. Объясните результат. Показать решение.

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

§1.2. Типы данных

14. Создайте переменные, присвоив им логические значения true и false , вещественное число 43.658+e2 , но предварительно записав его в обычном виде, и корень квадратный из отрицательного числа, например, sqrt(-2) . Выведите значения всех переменных на экран. Показать решение.

15. Создайте три переменные и присвойте им строки: ‘Добро ‘ , ‘побеждает ‘ , ‘зло’ . Создайте еще одну переменную и присвойте ей объединенную строку (для конкатенации строковых переменных используйте обычную точку). Выведите ее на экран. Показать решение.

16. Создайте переменную и присвойте ей строку «На манёврах «красные» выступали против «синих»» , предварительно экранировав двойные кавычки внутри двойных во избежание ошибки. Выведите строку на экран. Как еще можно поступить для вывода строк, содержащих внутри себя двойные или одинарные кавычки, чтобы не использовать их экранирование? Показать решение.

17. Создайте переменную $number и присвойте ей число 125 . Затем создайте еще две переменные, присвоив им строки «Я число $number» , но использовав для этого синтаксисы heredoc и nowdoc . Выведите строки на экран и сравните результаты. Показать решение.

18. Создайте переменную $m_1 и присвойте ей массив, созданный при помощи конструкции array() и содержащий два элемента с ключами ‘фрукты’ и ‘овощи’ и соответствующими значениями ‘апельсины’ и ‘помидоры’ . Выведите на экран значение элемента массива с ключем ‘фрукты’ . Проделайте все тоже самое, но использовав переменную $m_2 и создав массив при помощи синтаксиса квадратных скобок. Показать решение.

19. Создайте переменную $m_1 и присвойте ей массив, состоящий из двух элементов (ключи не указывайте). Выведите на экран значение второго элемента массива (не забываем, что нумерация элементов массива начинается с нуля). Добавьте в массив третий элемент, также не указывая его ключ. Выведите его значение на экран. Добавьте в массив еще один элемент, указав в качестве ключа число 5 . Выведите его значение на экран. Показать решение.

20. Посмотрите на условие задачи. При попытке вывода каких элементов массива будут выведены ошибки и почему? Показать решение.

Условие задачи №20

21. Создайте массив с двумя элементами. Измените значение первого элемента и выведите его на экран. Добавьте в массив еще один элемент в виде пустой строки и выведите его на экран. Добавьте в качестве нового элемента массива другой массив с тремя элементами и выведите на экран значение второго элемента этого массива. Показать решение.

22. Создайте массив с четырьмя элементами. Удалите второй элемент массива, использовав для этого функцию unset() . Попытайтесь вывести удаленный элемент на экран. Теперь удалите последние два элемента массива, передав их в качестве аргументов функции unset() через запятую. Попробуйте вывести на экран удаленный последний элемент массива. И, наконец, добавьте в массив элемент, который сам является массивом с двумя элементами. Удалите первый элемент добавленного массива и затем попробуйте вывести его на экран. Также выведите на экран оставшийся элемент добавленного массива. Показать решение.

23. Посмотрите на условие задачи и скажите, какие значения будут присвоены переменным после преобразования типов? Что будет выведено на экран при помощи оператора echo ? Не забывайте, что оператор перед выводом преобразует все значения в строки! Показать решение.

Условие задачи №23

§1.3. Выражения и операторы

24. Какие значения будут присвоены переменным в результате вычисления выражений? Выведите их на экран. Показать решение.

Условие задачи №24

25. Создайте переменную $a и присвойте ей стартовое значение 0 . Создайте переменную $b и присвойте ей выражение, состоящее из префиксного оператора инкремента и переменной $a . Выведите новое значение переменной $b и значение переменной $a на экран. Верните переменной стартовое значение, после чего проделайте тоже самое, но использовав постфиксный оператор инкремента. Объясните полученный результат. Для закрепления проделайте все тоже самое, но уже с префиксным и постфиксным операторами декремента. Показать решение.

26. Создайте переменную $a и присвойте ей стартовое значение 0 . Увеличьте значение переменной на 10 , использовав комбинированный оператор присваивания. Выведите новое значение на экран. Далее, используя соответствующие комбинированные операторы и выводя промежуточные результаты на экран, увеличьте значение переменной в два раза, уменьшите на 5 , разделите на 3 , возведите в квадрат и в конце найдите остаток от деления на 7 . Показать решение.

27. Создайте переменную $a и присвойте ей строку ‘Ну, ты и ‘ . Измените значение переменной, присоединив к строке еще одну строку ‘фрукт!’ . Используйте для этого комбинированный оператор присваивания с конкатенацией. Выведите новое значение на экран. Показать решение.

28. Каковы будут результаты сравнения в условии задачи? Проверьте свои ответы посредством вывода результатов на экран. Не забывайте, что результатом сравнения выражений является одно из логических значений true или false . Соответственно, при выводе оператор echo преобразует их либо в строку ‘1’ , либо в пустую строку » . Показать решение.

Условие задачи №28

29. Какие значения будут присвоены переменной $a в условии задачи? Проверьте свои ответы посредством вывода на экран. Не забывайте, что результатом логических выражений является одно из логических значений true или false . Соответственно, при выводе оператор echo преобразует их либо в строку ‘1’ , либо в пустую строку » . Показать решение.

Условие задачи №29

§1.4. Управляющие конструкции

30. Создайте переменные $a , $b и присвойте им положительные числа. Присвойте частное от деления $a / $b третьей переменной $d . Используя условный оператор if , осуществите схему вывода на экран значения переменной $d только в том случае, если оно является положительным числом. Проверьте работу скрипта, после чего измените одно из значений переменных на отрицательное число и снова запустите скрипт. Показать решение.

31. Создайте переменные $a , $b и присвойте им положительные числа. Присвойте частное от деления $a / $b третьей переменной $d . Используя условный оператор if , осуществите схему вывода на экран значения переменной $d только в том случае, если оно является положительным числом. Если число окажется отрицательным или равным нулю, должно выводиться соответствующее предупреждение, а не значение переменной. Проверьте работу скрипта, после чего измените одно из значений переменных $a или $b на отрицательное число и снова запустите скрипт. Показать решение.

32. Создайте переменные $a , $b и присвойте им положительные числа. Присвойте частное от деления $a / $b третьей переменной $d . Используя условный оператор if в связке с else if , осуществите схему вывода на экран значения переменной $d только в том случае, если оно является положительным числом. Если число окажется отрицательным или равным нулю, то для каждого случая должно выводиться соответствующее предупреждение. Проверьте работу скрипта, после чего измените одно из значений переменных $a или $b на отрицательное число и запустите скрипт снова. Чтобы проверить работу скрипта для нулевого значения, измените значение переменной $a на ноль. Показать решение.

33. Реализуйте условие задачи №32 при помощи оператора switch . Показать решение.

34. Создайте переменную и присвойте ей массив, состоящий из пяти элементов, например, чисел или строк. Создайте еще одну переменную, которой присвойте какое-нибудь значение. Теперь создайте конструкцию switch , которая будет определять, есть такой элемент в массиве или нет и выводить соответствующее сообщение. Для упрощения кода используйте операторы case , идущие друг за другом и содержащие метки в виде значений элементов массива, но не прерывающиеся операторами break . Не забудьте про условие по умолчанию, которое будет выводить сообщение, если элемента в массиве нет. Протестируйте конструкцию, присваивая второй переменной различные значения. Показать решение.

35. Создайте переменную $a и присвойте ей ноль в качестве стартового значения. Выведите на экран при помощи цикла while цифры от 1 до 5 , использовав для этого операцию префиксного инкремента переменной $a . Сбросьте значение переменной и сделайте тоже самое, но при помощи цикла do/while . Показать решение.

36. Создайте переменную $a и присвойте ей массив, состоящий из пяти элементов. Выведите все элементы массива на экран сперва при помощи цикла while , а затем и do/while . Показать решение.

37. Выведите все элементы массива из предыдущей задачи на экран при помощи цикла for . Обратите внимание на компактность кода. Показать решение.

38. Используйте цикл for для вывода на экран целых положительных чисел не превышающих 50 . Прервите цикл на 10 итерации при помощи внутреннего условного оператора if и оператора break . Показать решение.

39. Выведите на экран таблицу умножения. Используйте внешний и внутренний циклы for . Чтобы таблица имела привычный для нас ‘квадратный’ вид, в конце каждой итерации внешнего цикла задайте вывод разрыва строки. Показать решение.

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

41. Создайте массив, состоящий из пяти элементов в виде целых чисел. Увеличьте значения всех элементов массива в два раза, использовав для этого цикл foreach . Выведите на экран новые значения элементов массива. Показать решение.

42. Выведите на экран при помощи цикла for положительные целые числа от 1 до 10 . Затем используйте оператор continue , чтобы исключить из ряда числа 3 , 4 , 5 . Попробуйте разместить оператор continue до и после инструкции вывода значений на экран и объясните результат. Показать решение.

43. Используйте условие задачи №39, но исключите из таблицы столбик умножения на 5 . Для этого прервите внутренний цикл оператором continue при $k==5 . Показать решение.

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

§1.5. Функции

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

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

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

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

49. Создайте две переменные $sum и $product и присвойте им стартовые значения, равные 0 и 1 . Создайте пользовательскую функцию, принимающую два аргумента по ссылке, а все остальные по значению в массив переменной длины. Функция должна вычислять сумму всех аргументов, переданных в массив переменной длины, и присваивать ее первому аргументу. Второму аргументу она должна присваивать произведение всех аргументов, переданных в массив переменной длины. Возвращать функция должна массив, состоящий из первых двух аргументов, переданных функции (т.е. сумму и произведение). Используйте для доступа к элементам массива цикл foreach . Вызовите функцию, передав ей в качестве первых двух аргументов наши переменные, а также три числа. Выведите на экран значения возвращенного массива, а также значения наших переменных. Объясните результат. Показать решение.

50. Создайте пользовательскую функцию, которая будет выводить на экран сумму первых двух переданных ей аргументов. Количество передаваемых функции аргументов не указывайте. Если функция будет получать более двух аргументов, она должна выдавать соответствующее предупреждение и не выводить сумму. Вызовите функцию, передав ей в качестве аргументов массив из двух чисел и развернув его в простые аргументы при помощи ‘. ‘ . Повторите тоже самое для массива из трех чисел. Напомним, что количество переданных функции элементов можно узнать при помощи функции func_num_args() , а получить доступ к ним можно при помощи функции func_get_arg(n) . Показать решение.

51. Задайте режим строгой типизации (используйте инструкцию declare(strict_types=1); ), после чего создайте пользовательскую функцию, которая будет принимать два целочисленных аргумента и выводить на экран их сумму. Вызовите функцию, передав ей в качестве аргументов сперва два целых числа, а потом одно из них в виде строки. Закомментируйте строку с инструкцией строгой типизации и перезапустите скрипт. Объясните результат. Показать решение.

52. Задайте режим строгой типизации (используйте инструкцию declare(strict_types=1); ), после чего создайте пользовательскую функцию my_func() , которая будет принимать два целочисленных аргумента и возвращать их произведение. Создайте переменную $count_apples и присвойте ей строку с именем функции. Обратитесь к функции через переменную и выведите на экран общую массу яблок зная, что имеется 23 корзины по 7 кг яблок в каждой. Показать решение.

53. Создайте переменную и присвойте ей целое число. Создайте еще одну переменную и присвойте ей анонимную функцию, наследующую эту переменную и выводящую на экран ее инкрементированное значение. Осуществите вызов функции, затем измените значение внешней переменной и опять вызовите функцию. Объясните результат. Измените скрипт, задав наследование переменной по ссылке. Объясните изменения результата, если они будут. Показать решение.

§1.6. Классы и объекты

54. Создайте класс, в котором задайте константу, общедоступные свойство и метод класса. Метод класса должен выводить какое-нибудь сообщение. Создайте экземпляр класса. Вызовите метод класса, а также выведите на экран сумму значений константы класса и его свойства. Не забудьте, что для доступа к константе класса нужно использовать двойное двоеточие ‘::’ , а не объектный оператор ‘->’ . Показать решение.

55. Имеется 7 корзин. Нужно разработать класс, который будет подсчитывать общую массу яблок в зависимости от вместимости корзин. Для этого создайте сам класс. Затем создайте константу класса, которой присвойте количество корзин. Объявите свойство класса, но не инициализируйте его. Свойство будет отвечать за вместимость корзины в килограммах. И, наконец, объявите метод, который будет принимать в качестве аргумента вместимость корзины, т.е. значение соответствующего свойства, а возвращать произведение количества корзин (значение нашей константы) на вместимость одной корзины. После оформления класса, создайте его экземпляр и выведите на экран количество корзин. Не забудьте, что для доступа к константе класса нужно использовать двойное двоеточие ‘::’ , а не объектный оператор ‘->’ . Затем присвойте свойству класса положительное число и выведите на экран общую массу яблок, которую могут вместить все корзины, использовав для этого оператор echo и вызов метода класса. Показать решение.

56. Используйте условие задачи №54, но объявите свойство класса статическим. Не забудьте сразу же изменить и последующий код скрипта! Показать решение.

57. Используя условие задачи №55, создайте класс-потомок. В нем объявите общедоступное свойство $price и создайте метод product_price() , который аналогичным образом будет вычислять общую стоимость всех яблок. После чего выведите общее количество корзин, массу и стоимость всех яблок на экран. Показать решение.

58. Используя условие задачи №57, создайте класс-потомок уже созданного класса-потомка. В нем объявите константу sale , которая будет отвечать за размер скидки, и создайте метод product_sale() , который будет определять величину скидки в зависимости от общей массы приобретенных яблок. При определении метода используйте конструкцию parent:: для доступа к методу product_price() и конструкцию self:: для доступа к константе sale . Метод должен давать скидку, если масса купленных яблок превысит 50 кг. После оформления класса-потомка, создайте объект класса, установите массу яблок, которые помещаются в одну корзину, в 12 кг, а стоимость одного килограмма в 1.6 у.е. Далее выведите на экран общее количество корзин, общую массу яблок в корзинах, а также стоимость всех яблок без скидки и со скидкой. Показать решение.

59. Внимательно изучите условие задачи и закомментируйте неверные инструкции. Показать решение.

Условие задачи №59

60. Создайте абстрактный класс, который будет содержать два абстрактных защищенных метода return_car_name() и return_car_price() , а также один обычный общедоступный метод return_year($year) , принимающий год выпуска автомобиля, а возвращающий строку «Год выпуска авто: <$year>» . После оформления абстрактного класса, создайте два класса-потомка bmw_car и ford_car . Абстрактный метод return_car_name() после реализации должен возвращать строку с маркой автомобиля, а return_car_price() , соответственно, его цену в виде числа. Создайте экземпляр первого класса и вызовите его методы, а затем повторите тоже самое со вторым классом. Показать решение.

61. Объявите два интерфейса, а в каждом из них по дному общедоступному методу. Реализуйте оба интерфейса в классе. Методы после реализации должны принимать по одному аргументу, а затем просто возвращать их. Создайте объект класса и выведите на экран остаток от деления результата вызова первого метода на результат вызова второго метода. Методам в качестве аргументов передайте целые числа. Не забывайте, что при реализации интерфейсов в классе используется служебное слово implements , а служебное слово extends используется при наследовании интерфейсов друг от друга. При этом разрешается наследовать сразу несколько интерфейсов, разделяя их запятыми. Показать решение.

62. Объявите два трейта, а в каждом из них по одному общедоступному методу, каждый из которых должен принимать по одному аргументу, а затем просто возвращать его. Реализуйте оба трейта в классе. Создайте объект класса и выведите на экран остаток от деления результата вызова первого метода на результат вызова второго метода. Методам в качестве аргументов передайте целые числа, которые вы использовали в предыдущей задаче с интерфейсами. Сравните результаты. Не забывайте, что при реализации трейтов в классе используется служебное слово use , при этом разрешается наследовать сразу несколько трейтов, разделяя их запятыми. Показать решение.

63. Измените условие предыдущей задачи, объявив методы защищенными и задав им одинаковые имена. Реализуйте оба трейта в классе. Создайте объект класса и выведите на экран остаток от деления результата вызова первого метода на результат вызова второго метода. Методам в качестве аргументов передайте целые числа, которые вы использовали в предыдущей задаче. Сравните результаты. Не забывайте, что при реализации трейтов, у которых присутствуют методы с одинаковыми именами, используются служебные слова insteadof и as . Первое из них позволяет указать, метод которого из трейтов следует использовать, а второй позволяет изменить область видимости метода или же использовать его под другим именем. Показать решение.

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

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

66. Создайте класс, объявите в нем два общедоступных свойства, а также метод __clone , который будет увеличивать значение первого свойства на единицу. Значение первого свойства, соответственно, установите в 0 , а второму присвойте строку ‘Неизменяемое свойство’ . Создайте экземпляр класса и выведите на экран значения свойств. Затем клонируйте объект и выведите на экран значения свойств клона. Объясните полученный результат. Показать решение.

67. Присвойте переменной анонимный класс. В классе объявите закрытое свойство, но не инициализируйте его. Для того, чтобы получить возможность инициализации свойства вне класса используйте метод перегрузки __set , а для получения его значения – метод __get . Сделайте так, чтобы в случае неинициализированного свойства метод выводил соответствующее предупреждение. После оформления класса попытайтесь вывести значение свойства на экран. Затем присвойте свойству значение и повторите попытку. Объясните результат. Показать решение.

68. Задайте режим строгой типизации (используйте инструкцию declare(strict_types=1); ), после чего объявите класс A . В нем создайте общедоступный метод, который будет просто возвращать свой числовой (!) аргумент. Затем создайте еще один общедоступный статический метод, который будет принимать два числовых аргумента, а затем выводить на экран произведение вызова первого метода, которому будет передаваться в качестве аргумента первый аргумент данного статического метода, на второй аргумент метода. На первый метод сошлитесь при помощи конструкции self:: . Создайте класс-потомок B , в котором переопределите первый метод таким образом, чтобы он возвращал не сам аргумент, а его квадрат. После оформления вызовите из второго класса первый метод. Объясните результат. Замените в скрипте конструкцию self:: на static:: и вызовите метод повторно. Объясните изменение результата. Показать решение.

§1.7. Пространства имен

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

70. Объявите пространство имен, в котором создайте константу, переменную $b , функцию и класс. Переменной присвойте какое-нибудь число. В функции реализуйте возврат переданного ей аргумента. В классе объявите общедоступный статический метод, выводящий на экран сумму квадратов двух чисел. Далее объявите какое-нибудь подпространство, куда импортируйте константу, функцию и класс созданного ранее пространства имен, использовав их под псевдонимами C , F , CL . Находясь в созданном подпространстве выведите на экран значение константы C , переменной $b , вызова функции F и вызова метода класса CL . Показать решение.

§2.1. Краткий обзор некоторых встроенных возможностей PHP

71. Дан массив [«Dima», 11, true, null, [33,44], 1.23] . Нужно вывести информацию о его элементах на экран. Каждый вывод информации об элементе массива должен нумероваться, начиная с единицы. Для решения задачи используйте цикл foreach и функцию var_dump() . Показать решение.

72. Дан тот же массив [«Dima», 11, true, null, [33,44], 1.23] . Нужно вывести информацию о типе каждого его элемента на экран, например, «3-й элемент массива является строкой». Каждый вывод информации о типе элемента массива должен нумероваться, начиная с единицы. Для решения задачи используйте цикл foreach , оператор switch и функции is_int , is_string и т.д. Полный список функций посмотрите в официальном справочнике. Показать решение.

73. Создайте массив, в который поместите все натуральные числа, не превышающие 20 . Теперь измените все четные значения массива, увеличив их в три раза. Выведите их на экран. Для решения задачи создайте соответствующую callback-функцию , передав ей аргумент по ссылке, а затем используйте функцию array_walk() , передав ей в качестве второго аргумента созданную callback -функцию. Не забудьте посмотреть описание функции в официальном справочнике. Показать решение.

74. Создайте массив, в который поместите все натуральные числа, не превышающие 15 . Отфильтруйте полученный массив при помощи функции array_filter() , удалив из массива все нечетные значения. Выведите оставшиеся элементы массива на экран. Показать решение.

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

76. Выделите из строки ‘Иван_Иванов’ имя и фамилию и выведите их на экран. Используйте для поиска позиции первого вхождения разделителя в строку функцию mb_strpos() , а для получения требуемых подстрок функцию mb_substr() . Опять же, обязательно смотрите описание функций в соответствующем разделе официального справочника. Показать решение.

77. Создайте функцию match_letter() , которая будет в качестве первого аргумента принимать строку $str и проверять ее на соответствие допустимым символам массива $alphabet , который будет передаваться в качестве второго аргумента. Результат проверки функция должна выводить на экран. Проверьте с помощью этой функции на наличие запрещенных символов строки ‘s-1’ , ‘S_20’ и ‘3_S’ , если в качестве массива допустимых символов передается массив [‘s’,’_’,’1′,’2′,’3′] . Для решения задачи используйте внешний цикл for по всем символам строки (длину строки можно узнать при помощи mb_strlen() ), а также внутренний цикл for по всем элементам массива (число элементов массива можно узнать при помощи count() ). Во внутреннем цикле следует сравнивать текущий символ строки со всеми символами массива, чтобы установить его допустимость. Если вы не смогли решить задачу, обязательно разберите код решения, заглядывая в официальный справочник, и наберите код самостоятельно. Показать решение.

78. Вычислите выражение (sin30°+3/4)/|1/5-3/7|+log10100 . Для решения используйте математические функции, имеющиеся в PHP . Показать решение.

79. Выведите на экран время по Минску в виде двух строк следующего формата: Дата: 21.02.2020 (Среда) , Время: 16ч. 20мин. 37сек . Для установки часового пояса Минска используйте date_default_timezone_set() , названия дней недели переведите на русский при помощи оператора switch и массива, возвращаемого функцией getdate() . Чтобы в формате даты месяцы до десятого шли с нулем, используйте условный оператор if с соответствующим условием. Показать решение.

80. Установите пользователю куки на десять секунд с датой последнего посещения страницы. Дата должна выводиться ему при каждом новом посещении в формате » Прошлый раз вы посещали страницу 21.2.2020 в 18ч. 18мин. 41сек. по Минскому времени «. В случае первого посещения страницы выведите соответствующее сообщение. Для получения массива с данными даты сервера используйте функции предыдущей задачи. Показать решение.

81. Напишите простейший скрипт счетчика посещений страницы на основе сессий. Для хранения данных счетчика используйте суперглобальный массив $_SESSION . Показать решение.

§2.2. Расширения для работы с файловой системой

82. Если вы еще не создали на локальном сервере папку test , сделайте это. Она будет служить корневой папкой нашего учебного сайта на локальном сервере.
Создайте в папке файл start_file.php со скриптом, который будет проверять наличие в текущей корневой папке и, в случае необходимости, создавать файлы .htaccess и index.html . Если создаваемый файл уже будет существовать либо возникнет ошибка создания файла, скрипт должен будет вывести соответствующее предупреждение. Запустите скрипт пару раз. Затем удалите один из созданных файлов, еще раз запустите скрипт и посмотрите результ. Для решения задачи используйте функции file_exists() и touch() . Показать решение.

83. Запишите в файл .htaccess , созданный в предыдущей задаче, следующее содержимое.

Выведите содержимое файла и его размер на экран. Для записи используйте функцию file_put_contents() , которая в случае необходимости требуемый файл сперва создаст, а для получения содержимого функцию file_get_contents() . Чтобы содержимое выводилось на экран в две строки, используйте функцию nl2br() , которая добавит перед переносом строки
. Показать решение.

84. Запишите в файл index.html , созданный в задаче 82, следующее содержимое.

Выведите содержимое файла на экран. На этот раз для записи используйте функцию fopen() в режиме ‘wb’ , а также функции fwrite() и fclose() . Для получения содержимого опять используйте функцию file_get_contents() . Показать решение.

85. Создайте при помощи php -скрипта в корневом каталоге test на локальном сервере каталог css , а в нем файл styles.css . В случае существования директории либо возникновения ошибки, скрипт должен выводить соответствующее предупреждение. Для создания каталога используйте функцию mkdir() . При этом учтите, что функция в случае неудачи не только возвращает false , но и выводит ошибку уровня E_WARNING . Поэтому сначала присвойте результат выполнения функции переменной, использовав перед выражением оператор подавления ошибок ‘@’ , и только затем составляйте условную конструкцию с оператором if . Показать решение.

86. Если вы решили все предыдущие задачи, то в корневом каталоге test на локальном сервере должны присутствовать: файлы .htaccess и index.html , каталог css , а в нем файл styles.css , а также файл со скриптом edit_file.php . Теперь создайте в корневой папке при помощи скрипта еще один каталог php и переместите туда сам php -файл со скриптом. Показать решение.

87. Запишите в файлы styles.css и index.html следующее содержимое.

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

88. Удалите вручную содержимое корневой папки за исключением файла .htaccess . Создайте в ней (опять же, вручную) php -файл incl_file.php , скрипт которого будет выводить на страницу строку ‘Я была вставлена скриптом PHP!’ . Создайте индексный файл и подключите файл incl_file.php в тело документа. Для этого используйте оператор include_once . Показать решение.

§2.3. Работа с формами

89. Создайте форму, состав и внешний вид полей которой показан на скриншоте. Скрипт, который будет обрабатывать данные формы на сервере, должен выводить либо сообщения с данными формы либо просить заполнить все поля формы (см. скриншот задачи). Для проверки заполнения полей имени и фамилии используйте условный оператор if и функцию mb_strlen() . Не забывайте, что после скачивания файла содержимое папки нужно разместить в корневой папке test нашего учебного сайта на локальном сервере (иначе скрипт работать не будет). Показать решение.

Условие задачи №89

90. Создайте форму, состав и внешний вид полей которой показан на скриншоте. Скрипт, который будет обрабатывать данные формы на сервере, должен проверять заполнение полей имени и фамилии и в случае ошибки выводить предупреждение и прерывать скрипт. Что касается аватарки, то скрипт должен либо вывести аватарку после имени и фамилии, либо сообщить о незагруженной аватарке (см. скриншот задачи). Для получения имени, размера и временной папки для хранения загруженных файлов используйте суперглобальный массив $_FILES . Для перемещения загруженной аватарки в целевую папку используйте функцию move_uploaded_file() (в качестве целевой создайте папку avatars ). Чтобы правильно указать путь к вставляемой на страницу аватарке, не забудьте начать его с http://localhost/test/ . Показать решение.

Условие задачи №90

91. Хорошо изучите пример в учебнике, в котором используется форма, ссылающаяся сама на себя. Создайте в корневой папке test страницу с такой формой, добавив в нее кнопку ‘Сбросить’ . Что касается php -скрипта, то его нужно усложнить. Скрипт должен делать проверку заполнения полей имени и фамилии и в случае ошибки прерывать дальнейшее выполнение скрипта и выводить сообщение. Также скрипт должен проверять, был ли сделан выбор предпочтения и в зависимости от этого делать соответствующий вывод (см. скриншот). Показать решение.

Мастер Йода рекомендует:  Архитектура приложения и паттерн MVC
Добавить комментарий