8. Объясните смысл кода, изображенного на картине:
— Оператор исполнения выполнит строку, заключенную в кавычки, с сохранением результата в буфере оперативной памяти
— Переменной с именем output присваивается значение, заключенное в кавычки
+ Оператор исполнения выполнит строку, заключенную в кавычки, а затем возвратит полученный результат
9. Как правильно включить файл “time.inc”?
— php include ‘time.inc’ <>
тест 10. Укажите правильный способ создания функции в php:
11. Укажите неверно заданное имя:
12. Укажите верно заданный массив с использованием синтаксиса языка php:
13. В php файлы cookie задаются следующим образом:
14. Для написания комментариев в пределах работающего кода на php используется запись вида:
16. В php суперглобальная переменная, содержащая информацию о местоположении скриптов, путях, заголовках – это:
17. Укажите оператор, написанный на языке php, который делал бы файл «filename.txt» доступным для чтения.
18. Каждый php-оператор должен заканчиваться:
— Знаки препинания в php не используются
19. Какой способ использования тегов рекомендован для языка программирования php?
21. Вызов функции из самой себя – это:
22. Выберите верное утверждение, характеризующее множественное наследование в php.
— Множественное наследование задается через подключение родственных классов. Для этого используется функция _multi()
+ В php не существует понятия «множественное наследование», т.е. у класса может быть лишь один родитель. Эмуляция множественного наследования задается функцией _call () или трейтами
— Организовать наследование позволяет метод _constructor(), создающий родственные экземпляры базового класса
23. Какая ошибка содержится в коде на картинке?
— MSG и msg – это разные значения. Чтобы интерпретировать их как значение для одной и той же переменной, следует использовать одинаковый регистр
+ Записи (1) и (2) представляют собой одинаковый код. Разница в том, что (1) – это стандартный синтаксис, (2) – краткий. В php приемлемы оба варианта
— Запись (1) представляет собой код, который выведет на экран фразу ‘Выполнить документ’, (2) – это комментарий к коду, который никак не отобразится у конечных пользователей
— Запись (1) – это программа, написанная на языке php, (2) – на языке Java. Результирующий вывод при их исполнении одинаковый
25. Какой тип данных следует использовать для выражения “-42”?
26. Для чего используется ключевое слово global?
+ Для получения доступа к глобальной переменной, которая находится внутри функции
— Для подключения библиотек из глобального каталога
— Для указания того, что переменная будет многократно использоваться
29. Логический оператор ИЛИ на языке php выражается символом:
— Невозможно определить по заданным условиям
31. Какие нововведения появились в php 5.6?
+ Выражения в константах, нефиксированные параметры в функциях
— Короткая запись массивов, константы классов
— API хеширование паролей, трейты, замыкания
32. В чем разница между print и echo?
— print – это конструкция, echo – это функция
— В объеме задействованной оперативной памяти при выполнении кода. Обращаясь к функции print, интерпретатор задействует больше оперативной памяти, чем при обращении к функции echo
33. Какие из перечисленных переменных являются суперглобальными?
34. Для чего используются методы _isset и _unset?
— Для создания классов наследования
— Для определения глобальных переменных
+ Для перегрузки свойств
35. Главной особенностью библиотеки классов PEAR является:
+ Жесткие правила внесения изменений
— Многочисленность используемых классов
36. Скрипты, написанные на php, обрабатываются интерпретатором в определенной последовательности, чтобы обеспечить кроссплатформенность. Расположите эти этапы в правильном порядке: (1) генерация байт-кода (2) лексический анализ исходного кода и генерация лексем (3) выполнение байт-кода (4) синтаксический анализ лексем
37. Укажите тип исполнения для языка php:
— Интерпретатор объектно-ориентированного типа
+ Интерпретатор компилирующего типа
38. Что отобразит браузер при исполнении следующего кода:
PHP имеет целый ряд встроенных функций для обработки объектов самого различного рода. ( PHP 3.0 Functions reference )
был использован следующий код:
2.2. Работа с файлами и процессами
2.3. Работа с базами данных
В качестве примера, приведем код, который производит выборку из простейшей таблицы, содержащей номера телефонов и наимонования компаний. В результате работы кода получилось следующее:
Телефон
контора Купи-продай
222-33-44
ГлавСовСнаб
333-44-55
MuSt DiE
444-55-66
Название фирмы
Телефон
Итак, постепенно мы приходим к следующему выводу: использование PHP целесообразно при создании часто обновляемых либо громоздких в написании программ, скорость выполнения для которых не является критическим параметром (имеется в виду, что если разница между временем выполнения скрипта на С и скрипта на PHP составляет 10-20%, то вполне можно предпочесть скорость разработки скорости выполнения) и необходимо быстрое создание полнофункционального приложения. (если интересно мое личное мнение то кроме PHP я использую только C, и то, очень редко.)
PHP работает точно также. Ты пишешь команды одну за другой, а PHP последовательно их исполняет.
Что такое PHP скрипт
Но есть одно важное отличие:
Скрипты запускаются только через http-запросы в браузере. Это значит, что для запуска скрипта script.php необходимо в адресной строке браузера написать site.ru/script.php
Веб-серверы чаще всего настроены так, что при заходе на главную страницу (например site.ru ) автоматически запускается файл index.php или index.html, лежащий в корне сайта.
Создай в корневой папке сайта файл с названием index.php и открой его в своём текстовом редакторе. При наличии файла index.html его нужно удалить.
Обязательно следи за кодировкой скриптов. Кодировка должна быть либо UTF-8 без BOM (если такая доступна в твоём редакторе), либо просто UTF-8.
Вывод чисел и строк в PHP
Команда echo отвечает за вывод информации на экран. После оператора указывается значение, которое нужно вывести.
Чтобы вывести текст, его нужно указать в одинарных или двойных кавычках:
Команды в PHP разделяются точкой с запятой. Для удобства чтения каждую команду принято писать с новой строки:
Результат в браузере:
Вывод HTML кода в PHP
HTML-код можно перемешивать с командами PHP:
Также HTML код можно подставить в PHPшную строку:
Результат в браузере:
Мы можем как угодно совмещать PHP код и HTML теги:
Функции в PHP
Функция phpinfo() выводит на экран информацию с текущими настройками PHP.
Некоторые функции ожидают, что им передадут какое-нибудь значение. Например, функция округления ceil() ожидает число, которое она округлит:
Функции будут подробно рассмотрены в отдельном уроке.
Необходимость закрывающего тега в PHP
Сокращённый синтаксис открывающего тега в PHP
Кроме этого, мы можем заменить тег на более короткую версию :
Использование тега вызывало множество споров в среде PHP разработчиков. Точку в этом вопросе поставили создатели языка PHP: начиная с PHP 7.4 короткий тег объявлен устаревшим, а в PHP 8 его уже не будет.
Комментарии в PHP
Однострочные комментарии в PHP пишутся после символа # или // и действуют до конца строки:
Многострочные комментарии размещаются между /* и */ :
Обратите внимание, многострочные комментарии нельзя вкладывать друг в друга:
Итого
Важно следить за кодировкой скриптов и выбирать либо UTF-8 без BOM, либо просто UTF-8.
Для вывода каких-либо значений в браузер используется команда echo, либо сокращённый синтаксис :
Функции в PHP указываются с круглыми скобками в конце:
Также в PHP можно добавлять однострочные и многострочные комментарии:
Многие начинающие веб-программисты знакомятся с языком посредством книг. Книга бесспорно очень важна и нужна, но в ней приводятся примеры (для начинающих), которые по своей сути не являются правильными с точки зрения устойчивости и переносимости скрипта. Под устойчивостью понимается возможность возникновения ошибок различного вида, под переносимостью – тоже самое, но при переносе скрипта с домашней локальной машины на сервер хостнг-провайдера.
Ниже я бы хотел сразу показать начинающим веб-разработчикам как надо учиться сразу писать скрипты, чтобы затем не испытывать лишних проблем и не «ловить» непонятно откуда вылезающие ошибки.
Сразу скажу, что я сам с этим столкнулся, так что все это прошло через мои мучения….
Рассматривать я буду следующие моменты:
1. Настройка PHP для локальной машины и на сервере. 2. Где зарыта «@»? 3. register_globals = Off и никак иначе. 4. Основные аспекты синтаксиса. Литерал ор нот литерал…
1. Настройка PHP для локальной машины и на сервере.
Почему я именно с этой главы начинаю. Дело в том, что многие на локальной машине сразу отключают показ всех ошибок. Это – НЕ правильно. Вместо того чтобы тупо смотреть в монитор и искать, где, как окажется, не хватает точки с запятой, можно по ошибке, выдаваемой PHP сразу понять, в чем дело.
Но сначала хочу сделать небольшое лирическое отступление по части того, как настраивать PHP, как Apache modul или fast-CGI. Самый оптимальный вариант – настраивать, как модуль веб-сервера. Для этого в конфигурационном файле httpd.conf веб-сервера Apache пишем следующие строчки:
Отличие от FastCGI – следующие. Первое. При FastCGI php.ini будет подгружаться в память веб-сервера приблизительно каждый второй раз при запуске скрипта, при установке, как модуля Apache загрузка конфигурации PHP будет осуществляться только при загрузке или рестарте веб-севрера, само собой быстродействие и нагрузка на сервер будет меньше. Помимо этого, при установке как fastCGI недоступны определенные функции. Начинающему программисту они не понадобятся., но при разработке крупного Интернет-приложения вы можете столкнуться с проблемами. А проблемы лучше предотвращать.
Теперь перейдем к конфигурации самого PHP. В конфигурационном файле php.ini в обязательном порядке устанавливаем следующие директивы с ниже написанными значениями:
Писать или не писать ошибки в лог файлы – это уже на ваше усмотрение. На сервере в хостиг-компании, обязательно, выключайте все эти директивы в целях безопасности, дабы потенциальный злоумышленник не мог узнать пути, где лежат ваши скрипты. Но по хорошему, когда вы уже публикуете свой скрипт в глобальной сети, он не должен выдавать никаких ошибок. Помимо этого
По умолчанию директива max_execution_time имеет значение 30, но для быстроты работы, лучше ставить меньше. Если у вас что-то «зациклилось», то 10 секунд вполне достаточно чтобы понять это.
В 3 главе я расскажу более подробно об этом…
Очень часто начинающие веб-разработчики не понимают разницы между ‘ и “, поэтому выключаем директиву. В 4 главе данный момент будет показан на примере…
2. Где зарыта «@»?
Это, пожалуй, самая основная ошибка начинающих программистов – использование “@”. Этот символ, перед каким-либо оператором подавляет вывод ошибки и ее запись в лог. Он не позволяет на стадии отладки отследить ошибку, и вы судорожно пытаетесь понять, в чем дело.
Поэтому строго на строго запрещаем вам использовать @.
Вы спросите, а как же тогда сделать, чтобы не выводилась ошибка? Чтобы не выводилась ошибка ее надо либо предотвращать, как в случае с файлами, то есть а) проверять файл на существование, б) проверять, а можно (есть права) в него что-то записать is_writeable();.
В других случаях, например при использовании mysql_connect(); надо проверять значение, которое вернет функция. Как правило, по нему можно определить, есть ошибка или нет. Обычно при ошибке возвращается значение FALSE, NULL или пустая строка.
Это позволит вам, выдавать пользователю не пустую страницу, если, к примеру, он попытался обратиться к информации (?n=14), а информация хранится у вас в файлах, и файла 14 не существует, а текст сообщение: «Информация не найдена».
«Ловля» ошибок является также очень важным аспектом безопасности при работе скрипта.
3. register_globals = Off и никак иначе.
Если в первых двух главах я делал акцент на тех моментах, с которыми начинающий программист столкнется уже сразу, то в этой главе я расскажу о таком моменте, который проявится уже позже… зачастую с ним все сталкиваются при переносе скрипта (уже готового) на сервер хостинг провайдера. Лично я долго привыкал к register_globals = Off, поэтому товарищи, начинающие программисты, сразу ставьте эту директиву выключенной. Помимо этого, данный момент ОЧЕНЬ ВАЖЕН в обеспечении безопасности скрипта.
Итак. В чем же вся загвостка. Сначала рассмотрим случай, когда у нас register_globals = On. Как вы уже, наверное, знаете, данные в скрипт могут передаваться тремя способами, сказал грубо, на самом деле их два. Первый это GET, т.е. данные передаются через адресную строку браузера после символа “?”, второй – POST, при его использовании данные предаются в неявном для пользователя виде. Метод POST используется, как правило, для отправки данных формы. Ну и третий – это Куки, переданные от пользователя скрипту.
Рассмотрим такой случай. У нас есть форма, которая находится по адресу index.php? form. В форме несколько текстовых полей полей. Пусть это будет family, name, phone. Форма отправляется на тот же index.php но методом POST. Проверив все данные, мы записали пользователю две Куки с именами family и form, во второй мы записали время доступа к форме, к примеру.
Представим, что у нас часть файла index.php состоит из следующего кода, т.е. в случае если пользователь уже ввел данные на форме, они ему показываются, если нет – выводится форма. И все это по адресу index.php?form.
Т.е. фактически все сводится к тому, что есть возможность подмены всех переменных. По сути это существенный минус в безопасности, поскольку очень велика вероятность того, что злоумышленник сможет посмотреть какие- либо важные файлы на сервере.
Теперь о том, как это реализовать под register_globals = Off
Что это значит. Ниже я просто перепишу скрипт, данные мною ранее для register_globals = Off..
В этой же главе хочу рассмотреть следующий маленький пример. Опять же сначала рассмотрим пример с включенным register_globals.
4. Основные аспекты синтаксиса. Литерал ор но литерал…
Разницы между “ и ‘ нет.
2. Вывод переменных часто осуществляют таким образом:
Такая строка «разбирается» интерпретатором намного должен, чем
Первый вариант наиболее предпочтителен, да и с точки зрения редактирования программного кода – легче понять, где у тебя переменная, а где у тебя текст.
Для написания кода на PHP подходит любой текстовый редактор (например Notepad++).
РазмещениеPHPна HTML-странице
Код скрипта PHP может размещаться непосредственно на HTML-странице. Чтобы узнать, как это делается, давайте рассмотрим следующий простой пример:
Вместо специального тега могут также использоваться теги
Наш первый сценарий
Тексты сцеариев (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-теги, что видно из нашего примера.
Комментарии в скриптах
Содержание PHP-скрипта представляет собой код на РНР или на HTML. Но есть также комментарии, которые предназначены для описания скрипта.
В РНР существует три типа комментариев. Первый позволяет располагать комментарии в нескольких строках, начиная их символами /* (записываются без пробела) и заканчивая символами */, например:
Следует иметь ввиду, что вложенные комментарии записывать нельзя.
Многострочные комментарии могут оказаться полезными там, где надо вставить значительный объем текста. Кроме того, распространенным приемом при отладке программы является заключение части кода в комментарий (чтобы предотвратить его выполнение).
Остальные два типа комментариев начинаются с символов // или символа # и продолжаются только до конца строки, в которой они записаны. Этот тип комментариев удобен тем, что их можно размещать справа от операторов, например:
Очень часто комментарий добавляют в начало сценария, чтобы дать о нем краткую информацию и указать, какие функции он выполняет. Например:
Отображение текста
Оператор echo, который предназначен для отображения произвольного текста на web-странице, является, пожалуй, наиболее употребительным оператором РНР. В простейшем случае после echo следует поместить одну строку в кавычках. Текст может быть заключен как в двойные кавычки, так и в простые кавычки (апострофы). Для отображения чисел кавычки необязательны, например:
В общем случае после echo можно записать несколько строк для вывода, которые разделяются запятыми.
При необходимости длинная строка может быть размещена на нескольких строках в тексте скрипта, например:
Отдельные строки могут объединяться при помощи оператора сцепления «.» –– точка. В результате образуется единая строка, которая передается оператору echo. Например:
Для отображения кавычки следует разместить перед ней обратный слеш, например:
Замечание. Если выводится одна текстовая строка, то вместо оператора echo можно использовать функцию print. В этом случае различий между echo и print нет. Однако в echo мы можем добавлять к первой строке другие строки, разделяя их запятыми.
Отображение большого текста
Переменные, оператор присваивания
После создания переменной (в результате присваивания ей некоторого значения), доступ к этой переменной возможен в любом месте скрипта. При этом одна и та же переменная может содержать на протяжении программы значения разных типов.
Переменная существует до тех пор, пока выполняется программа.
Для присвоения значения переменной в РНР используется оператор присваивания, обозначаемый знаком равенства =. Ниже приведены примеры операторов присваивания:
$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().
Можно одновременно уничтожить несколько переменных:
Следующий текст при первом чтении можно пропустить
Типы данных
В языке РНР тип переменной определяется автоматически при создании переменной на основе ее значения. Тем не менее, следует иметь представление о типах данных, которые могут использоваться. Всего их восемь:
В данном случае тип переменной определяется однозначно. Трудности начинаются при смешивании различных типов данных в одном выражении, например, при сложении целого числа и строки, которая изображает число. Ниже приведено несколько примеров подобных выражений:
Для предотвращения потенциальных проблем не следует смешивать различные типы данных. Но даже и в таком случае РНР выполняет неявное преобразование типов. Если же требуется выполнить явное преобразование типа, то требуемый тип должен быть указан слева от имени переменной в круглых скобках. Вот несколько примеров явного преобразования типов:
При преобразовании в логический тип boolean, следующие значения преобразуются в значение FALSE.
При преобразовании к типу целых значений другие типы преобразуются так:
Возможно также преобразование строковых значений в числовые типы данных, но при этом имеется ряд особенностей.
Любые другие значения, включая все ресурсы, преобразуются в TRUE.
Итоги
Язык РНР предназначен для создания динамических web-страниц.