Переменные шаблона HTML.

22.06.2019

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

Что такое переменная?
Переменная – это контейнер, внутри которого находится информация.
Переменные в PHP начинаются со знака доллар «$ ».
Посмотрите схему :

Разъяснение схемы :

Если посмотреть на схемку, то можно увидеть, что в переменной $a (в контейнере) хранится цифровое значение – цифра «2 », а в переменной $f хранится текстовое содержание «сайт »

Теперь отображу эту схему в коде PHP. Это будет выглядеть вот так:

$ – это переменная;
a и f – это имя переменной. Имя переменной может быть любым, которое вам в голову взбредет. Но помните, есть разница как вы напишите имя переменной большими или маленькими буквами, например GERL и gerl – это будут разные имена;
= - это означает присвоить значение;
2 и "сайт " – это числовое и текстовое значение. Обратите внимание, что цифровое значение пишется без кавычек " " , а текстовое нужно писать с кавычками;
; - это означает, что действие законченно.

Теперь вставим этот PHP-код в HTML документ :

Основы PHP

Вычисление переменных.

Также можно создать функцию вычисления цифр, например, переменные можно делить (/ ), умножать (* ), прибавлять (+ ) и отнимать (- ). Для этого достаточно еще написать одну переменную, например $s . Переменная $s будет отвечать за полученный результат. Итак, на примере.

Основы PHP

Попробуем сделать разные функции вычислений цифр:

Основы PHP

Итак,
переменная $s - отвечает за полученный результат при прибавлении значений;
переменная $h - отвечает за полученный результат при отнимании значений;
переменная $p - отвечает за полученный результат при умножении значений;
переменная $x - отвечает за полученный результат при делении значений.

Сейчас вы убедитесь в полезности экранирования переменных. Припустим, вам нужно на экран монитора вывести названия с двумя кавычками " ", например, Степка работает в ПАО "КМЗ" .
Если вы напишите в коде PHP вот таким способом:

То у вас в результате получится вот такая красивая ошибка:

Причина такой ошибки – двойные кавычки в слове:

$name = "Степка работает в ПАО " КМЗ" ";

Правильно будет . Это делается при помощи "\ ". Пример:

Результат будет вот таким:

Если честно, я ни разу на практике не применял эту функцию. Но рассказать о престыковке я должен.
Попробуем престыковать переменную $a с $f . Это делается при помощи обычной точки «. ».

Основы PHP

Вот таким будет результат:

Сегодня я вас нагрузил одной теорией, но в следующем уроке мы перейдем к практическим занятиям, и вы сами убедитесь, как работают переменные в PHP. Попробуем все эти примеры вывести на экран с результатами. Вы познакомитесь с оператором вывода «echo ».

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

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

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

Табл. 1. Список переменных окружения
Переменная Описание
DOCUMENT_ROOT Путь к корневой папке сайта. Для локального веб-сервера значение может принимать вид z:/home/сайт/www, а в других случаях зависит от операционной системы сервера и используемого программного обеспечения.
GATEWAY_INTERFACE Версия CGI (Common Gateway Interface, общий шлюзовый интерфейс). Значение обычно равно CGI/1.1 .
HTTP_ACCEPT Типы файлов, которые способен принять браузер. В качестве значения возвращается список поддерживаемых MIME-типов разделенных между собой запятой, например: text/html, application/xhtml+xml .
HTTP_CONNECTION Тип соединения браузера с веб-сервером. Так, значение keep-alive означает, что браузер поддерживает постоянное соединение с сервером. При этом в течение одного сеанса соединения разрешено делать несколько запросов. Повторного соединения в таком случае уже не происходит.
HTTP_HOST Доменное имя сайта. Обычно различают имена с префиксом www (www..ru). Переменная вернёт тот адрес сайта, который указан в адресной строке браузера.
HTTP_REFERER Адрес страницы, с которой пользователь перешел на данный сайт, он еще называется реферер.
HTTP_USER_AGENT

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

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2

говорит, что пользователь использует браузер Firefox 6.0.2 под операционной системой Windows 7.

QUERY_STRING Запрос, который указан в адресной строке после вопросительного знака (?). Обычно пишется в форме «переменная=значение», где переменные разделяются между собой амперсандом (&).?id=5&slv=34 будет возвращено значение id=5&slv=34 .
REMOTE_ADDR IP-адрес посетителя сайта.
REQUEST_METHOD Метод отправки данных на сервер. По умолчанию применяется метод GET.
REQUEST_URI Адрес запрашиваемого документа. Отсчёт ведётся от корня сайта, т.е..html вернется значение 1.html .
SERVER_ADDR IP-адрес компьютера, на котором размещается сайт.
SERVER_ADMIN Адрес электронной почты администратора сайта.
SERVER_NAME Имя сервера.
SERVER_PORT Порт, по которому ожидается получение данных.
SERVER_PROTOCOL Протокол для получения и отправки данных. Значение обычно равно HTTP/1.1 .
SERVER_SOFTWARE Программное обеспечение установленное на сервере. Для веб-сервера Apache возвращается номер версии (Apache/2.2.4 ), а также версия PHP (PHP/5.3.3 ).

В примере 1 показано использование переменных окружения для отображения на веб-странице требуемой информации.

Пример 1. Вывод значения переменной DOCUMENT_ROOT

SSI

Путь к корневой папке сайта:

В результате выполнения примера будет выведена следующая строка: Путь к корневой папке сайта: /home/сайт/www .

Значения переменных окружения можно посмотреть с помощью программы на PHP, используя функцию phpinfo(), как показано в примере 2.

Пример 2. Использование phpinfo()

В результате выполнения программы будет выведена таблица с разными параметрами, в том числе и переменными окружения в разделе «Apache Environment» (рис. 1).

Рис. 1. Apache Environment

Также можно написать программу на PHP, которая будет выводить все переменные окружения в виде таблицы (пример 3)..

Пример 3. Вывод переменных окружения

\n\n\n\n"; print "

\n"; foreach ($_SERVER as $a => $b) print "\n"; print "
$a$b
\n"; print "\n\n"; ?>

Переменные и функции

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

Область действия переменных и глобальные переменные

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

Впрочем, функции создают новую область видимости. Переменные функ ции аргументы функции и любые переменные, определенные внутри функ ции, существуют только в этой функции и недоступны извне. Другими слова ми, это локальные переменные с локальной областью действия. Подобным образом к внешней переменной можно обратиться, только передав ее в функ цию как аргумент или же с помощью инструкции global. Последняя приблизи тельно означает: «Я хочу, чтобы эта переменная в функции была такой же, как и вне функции». Другими словами, глобальная инструкция превращает локальную переменную с областью видимости внутри функции в глобальную переменную с областью действия в пределах всей программы. Любые изменения глобаль ной переменной в функции автоматически передаются в переменную с тем же именем, когда она используется вне функции (после вызова функции, конеч но), без помощи команды return.
Синтаксис инструкции global следующий:

Function FunctionName (SArgument) {
global $Variable;
statement(s);

Рассмотрим подробнее, что же дает нам инструкция глобализации. Обыч ная переменная, даже если ее имя внутри функции полностью совпадает с та ким же именем в основной части программы, представляет собой совершенно другую структуру (возможно, с другим значением, нежели переменная вне функ ции). Пусть строка вызова функции выглядит как FunctionName ($Valuel) , а функция определена как FunctionName ($Argumentl). В момент обращения к функции РНР устанавливает значение $Argumentl равным значению $Valuel, и далее первое используется в теле функции. Если вы измените значение $Argumentl внутри функции, это никак не отразится на значении $Valuel. Если бы имена переменных случайно совпали, это бы ничего не изменило: они все равно являются двумя разными переменными. Область действия одной внут ри функции, другой вне функции. Поэтому, чтобы избежать путаницы, при написании функций мы предусмотрительно использовали различные имена пе ременных в строке определения функции и в строке ее вызова.

Мы затронули эту тему, потому что на самом деле необязательно применять разные имена. Для удобства можно использовать одно и то же имя в строке функции и в строке вызова (тогда легко запомнить передаваемые аргументы), но помните, что это разные переменные. То, что происходит со значением переменной внутри функции, остается в функции. И наоборот: изменения пе ременной вне функции не действуют на переменную с тем же именем внутри функции. Но, если вы сделали переменную глобальной с помощью инструкции global, она становится одной и той же переменной и внутри, и снаружи. Использование инструкции global

  1. Откройте файл numbers.php в текстовом редакторе (листинг 9.6).
  2. Уберите аргументы $Price и $TaxRate из функции CalculateTotal, что бы строка 2 выглядела так:
  3. function CalculateTotal ($HowMany, $SavingsT {

    Переменные $Price и $TaxRate будут введены в функцию как $Cost и $Тах с помощью инструкции global, поэтому нет необходимости использовать их как аргументы.

  4. Добавьте две глобальные инструкции.
  5. global $Cost;
    global $Tax;

    Они «Прикажут» функции использовать переменные $Cost и $Тах, которые уже существуют вне ее.

  6. Отредактируйте оставшуюся часть функции, заменив переменную $Price на $Cost, $TaxRate на $Тах, a $TheCost на $TotalCost.
  7. $Тах++; // $Тах составляет 1.06. *
    $TotalCost ~ ($Cost * $HowMany);
    if (($TotalCost < 50) AND ($Savings)) {
    print ("Your $$Savings will not apply because
    -the total value of the sale is under !\n

    ");
    } if ($TotalCost >= 50) {
    $TotalCost = $TotalCost $Savings;
    }.
    $TotalCost = $TotalCost * $Tax;
    return $TotalCost;

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

  8. Ниже в сценарии, после строки $Тах = 0.06; (строка 29), распечатайте текущее значение переменной. Оно будет меняться в ходе дальнейшего выполнения сценария.
  9. print ("The tax value is currently $$Tax .\n

    ");

    Для показа того, что инструкция global вводит переменную в функцию и что любые реализованные в функции изменения применяются глобально, распечатаем значение $Тах до и после вызова функции.

  10. Измените строку вызова функции CalculateTotal () , чтобы переменные
  11. $Тах и $Cost больше не передавались как аргументы.
    $TotalCost = CalculateTotal ($Quantity, $Discount);

    Так как функция принимает теперь только два аргумента, передача четырех аргументов вызовет ошибку.

  12. Еще раз распечатайте значение переменной $Тах.
  13. print ("After calling the function, the tax value
    is now $$Tax .\n

    ");

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

  14. Сохраните сценарий (листинг 9.7), загрузите его на сервер и протестируй те в браузере (рис. 9.5). Не забудьте отправить в сценарий значение коли чества (и значение скидки, если захотите), добавив его к адресу URL или через HTMLформу.

Листинг 9.7 т Так как функции CalculateTotal требуются значения пере менных $Cost и $Тах, они легко могут быть включены с помощью инструкции global. Помните, переменные больше нельзя передавать как аргументы это может запутать программиста и вызвать определенные ошибки в работе при ложения.

1 2 function CalculateTotal ($HowMany, $Savings) {
3 global $Cost;
4 global $Tax;
5 $Tax++; // $Tax составляет 1.06.
6 $TotalCost = ($Cost * $HowMany);
7 if (($TotalCost < 50) AND ($Savings)) {
8 print ("Your $$Savings will not apply because the total value
of the sale is under ! \n

") ;
9 }
10 if ($TotalCost >= 50) {
11 $TotalCost = $TotalCost $Savings;
12 } . .
13 $TotalCost = $TotalCost * $Tax;
14 return $TotalCost;
15 } // Конец функции CalculateTotal.
16 function CalculatePayments ($Amount, $NumberPayments) {
17 $ Payments = round ($ Amount , 2) / $Number Payments;
18 $Payraents = sprintf ("%01.2f", $Payrnents);
/19 return $Payments;
20 } // Конец функции CalculatePayments.
21 ?>
22
23
24 Calculation Functions
25
26
27 28 $Cost = 20.00;
29 $Tax = 0.06;
30 print ("The tax value IB currently $$Tax . \n

n);
31 if ($Quantity) {
32 $Quantity = abs ($Quantifey) ;
33 $Discount = abs($Discount) ;
34 $TotalCost = CalculateTotal ($Quantity, $Discount);
35 print ("After calling the function, the tax value is now $$Tax
36 // Печать результатов.
37 print ("You requested to purchase $Quantity widget (s) at $$Cost
each.\n

") ;
38 print ("The total with tax, minus your $$Discount, comes to $");
39 printf ("%01.2f", $TotalCost);
40 print (".\n

You may purchase the widget (s) in 12 monthly
installments of $");
41 print (CalculatePayments ($TotalCost, "12"));
42 print (" each.\n

") ;
43 } else {
44 print ("Please make sure that you have entered both a quantity
and an applicable discount and then resubmit.\n");
45 }
46 ?>
47
48

Задание значений аргументов по умолчанию

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

В качестве примера возьмем функцию CalculatePayments () (листинг 9.7). Как количество ежемесячных платежей можно задать значение 12 по умолча нию, создав функцию и используя следующий синтаксис:

Function CalculatePayments ($Amount, $NumberPayments = "12") {

Вызов функции с помощью кода CalculatePayments ($Amounts) ; не приве дет ни к каким проблемам, а строка CalculatePayments ($Amounts, " 2 4 ") ; за менит значение переменной $NumberPayments со значения по умолчанию, рав ного 12, на фактическое, равное 24.

Значение аргумента по умолчанию используется, если логика программы подразумевает определенное значение, которое все же можно изменить. Одна ко необходимо помнить, что аргументы по умолчанию должны всегда быть написаны после других стандартных аргументов (то есть не имеющих значения по умолчанию). Это делается потому, что значения аргументам в РНР присваи ваются напрямую в порядке их получения из строки вызова. Следовательно, невозможно опустить значение для первого аргумента и задать значение вто рому (это показывает, что вы послали одно значение, которое будет автомати чески присвоено первому аргументу, а не второму). Рассмотрим пример того, как не надо вызывать функцию. Допустим, функция определена следующим образом:

Function CalculateTotal ($HowMany, $Price = "20.00", $TaxRate = "0.06") {

Мы вызовем ее такой строкой:

CalculateTotal (3, "0.07");

При этом мы собираемся задать аргументу $HowMany значение 3, желая оста вить показатель $ Price равным 20.00 и надеясь изменить величину $TaxRate на 0.07. Увы, у нас ничего не выйдет. Переменная $HowMany действительно по лучит значение 3, $Price 0.07, a $TaxRate останется равным 0.06. Помнится, мы хотели получить несколько иной результат. Добиться нужного результата можно следующим образом:

CalculateTotal (3, "20.00", "0.07");

Теперь в свете того, что мы узнали о задании значений аргументов по умол чанию, изменим страницу numbers.php (листинг 9.7).

Написание функции, которая использует значения по умолчанию

Всем привет, тема переменных в CSS давно ходит по интернету, однако не все знают о том, что это такое, да и сама технология не так давно вышла в релиз. И хоть использовать её во многих случаях рановато, уже пора понимать что она из себя представляет и как ею пользоваться. Давайте попробуем разобраться с технологией вместе. Обращу ваше внимание, что эта статья для тех, кто не знает о CSS переменных (кастомных свойствах) или только слышал о них. Если вы знакомы и умеете работать с данной фичей, то вам данная статья будет не интересна.

Итак, тема с переменными в стилях уже затерта до дыр, т.к. они давным давно существуют в препроцессорах. Это удобно, я уже плохо представляю себе написание стилей без возможности сохранить где-то определенное значение (цвет, величину, название шрифта, тип маркера у списка, всё что может придти в голову...). Однако препроцессоры не могут дать нам той гибкости, которую дают нативные переменные в CSS, и скоро вы поймете, почему.

Для начала нужно понять, как объявлять и использовать переменные. Переменные объявляются в селекторах:

:root { --body-background: #ccc; } body { background-color: var(--body-background); }
Как видно из листинга выше, переменные объявляются двумя дефисами перед именем:
--variable-name

Чтобы использовать переменную, необходимо воспользоваться функцией var . Она имеет 2 параметра. Это, естественно, имя переменной, а вторым необязательным параметром идёт значение свойства, которое необходимо использовать в случае отсутствия переменной.

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

Title { --wrapper-width: 50%; width: var(--wrapper-width); } @media (max-width: 320px) { --wrapper-width: 100%; }
Всё! Этого достаточно, чтобы свойство width изменило свое значение!

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

Что насчёт JavaScript?

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

Title { --background: blue; background-color: var(--background); }
changeColor() { this.setState({ style: {"--background": "green"} }); }

Title

Теперь по клику на элемент с классом title будет меняться цвет фона у элемента. Круто? Ещё бы! Не нужно добавлять новый класс, переопределять свойство или делать другие действия, способствующие изменению фонового цвета у элемента.

Ремарка

Если кто-то не знаком с React или кому-то просто непонятно, что произошло. Мы просто средствами JavaScript изменили аттрибут style у элемента, изменив значение переменной
--background


Используя переменные, изменять css извне стало проще, методов использования можно придумать массу, а мы пойдем дальше.

Области видимости

Нужно сказать пару слов об области видимости CSS переменных, здесь всё просто. Объявленная переменная доступна всем селекторам дочерних элементов данного селектора. Т.е. в листинге ниже использовать переменную --b в тэге html будет нельзя. А вот переменная --a в body и всех дочерних элементах будет работать без проблем (если её конечно не переопределят где-то ниже).

Html { --a: #ccc; } body { --b: #a3a3a3; }
(я знаю, что цвета в примерах скучные, но я плохо помню цвета по hex-коду:))

Переменные и calc

Как и любое числовое значение свойства, вы можете использовать переменную в функции calc .

Title { --title-width: 300px; width: calc(var(--title-width) + 150px); }
Круто! Особенно если учесть что переменную --title-width , можно менять как внутри CSS, так и извне.

Заметьте, что величину мы обязаны положить в переменную. Дописать px , % , rem и т.д. к вызванной переменной у нас не получится. Однако ничто не мешает нам умножить с помощью функции calc значение на единицу в необходимой нам величине.

Title { --title-width: 300; /* так не сработает */ width: var(--title-width)px; /* так сработает */ width: calc(var(--title-width) * 1px); }

В заключение

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