Приступаем к следующему уроку, который называется «Переменная в 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 ».
В дополнение к этому Вы можете также использовать следующие специальные предопределенные переменные, которые являются уместными только в шаблонах HTML.
Переменные для использования только в шаблонах страницы раздела:
Эти переменные могут использоваться только в шаблонах страницы раздела. Они допустимы во всех HTML-основанных выходных форматах (Справка HTML, Броузерная справка, eBook и Справка Visual Studio / MS Help 2.0).
Переменная |
|
|
Вставляет правильный тэг DOCTYPE в начале страниц вывода HTML. Эта переменная является основной во всех шаблонах и не должна быть удалена. Если Вы удалите ее, то Вы получите сообщение об ошибках от компилятора. |
|
Вставляет правильную информацию набора символов в мета тэги в начале страниц вывода HTML. Эта переменная является основной во всех шаблонах и не должна быть удалена. Если Вы удалите ее, то Вы получите сообщение об ошибках от компилятора. |
|
Вставляет ссылку на таблицу стилей CSS, содержащую всю информацию стилей для вашего проекта. Эта переменная является основной во всех шаблонах и не должна быть удалена. Если Вы удалите ее, то Вы получите сообщение об ошибках от компилятора. |
|
Вставляет заголовок текущего раздела, если он существует. Если текущий раздел не имеет никакого заголовка, значение этой переменной - нуль. Это может отличаться от заголовка раздела, вставленного с . |
|
Вставляет заголовок текущего раздела как простой текст. Это особенно полезно, если ваши проектные заголовки отличаются и длиннее, чем заголовки Содержания, которые вставлены с . Это используется прежде всего для оптимизации механизма поиска, для которой Вы вставили бы это в мета тэг description , как это:
|
|
Вставляет основной текст раздела, то есть весть раздела, который отредактирован и отформатирован в вашем проекте в редакторе Help & Manual. Это - самая важная переменная - если Вы проигнорируете ее, то ваши разделы будут пусты! |
|
Генерирует ряд "ссылок навигации" следа крошки к разделам выше текущего раздела в дереве Содержания. Эта переменная пуста в разделах верхнего уровня. В разделах второго уровня и ниже переменная генерирует ряд ссылок в формате Ссылка1> Ссылка2 > Ссылка3 ... Текущий раздел не включен в ряд. Если Вы хотите поместить текущий заголовок раздела в конце следа крошки, Вы можете сделать это с переменной (см. ниже). Переменная следа крошки пуста в разделах в секции Невидимые разделы. Эта переменная имеет соответствующую пару условия: и . Эти условия могут использоваться, чтобы вставить след, только где это уместно, и вставить альтернативное содержимое, когда не уместно. |
Переменные для использования только в Броузерной справке:
Все оставшиеся переменные уместны только в Броузерной справке (HTML):
Глобальные переменные для всех шаблонов Броузерной справки:
Переменная |
|
|
|
|
|
|
|
|
Переменные только для шаблона Размещения набора фреймов:
Переменная |
|
|
|
|
|
|
Вставляет навигационный сценарий, требуемый главным фреймом. |
Переменные только для шаблона Содержания:
Переменная |
|
Вы определяете переменную, используя ключевое слово var , также вы можете опционально в этом же выражении присвоить переменной значение. Переменные, которые определены в функции, называются локальными переменными , они доступны только внутри функции. Переменные, которые определены напрямую в элементе script , называются глобальными переменными , они доступны всем, включая другие скрипты. В показано использование локальных и глобальных переменных.
Листинг 5-6: Использование локальных и глобальных переменных Example var myGlobalVar = "apples"; function myFunc(name) { var myLocalVar = "sunny"; return ("Hello " + name + ". Today is " + myLocalVar + "."); }; document.writeln(myFunc("Adam")); document.writeln("I like " + myGlobalVar );JavaScript – это язык со слабой типизацией. Это не означает, что в JavaScript нет типов. Это только обозначает, что вам не нужно напрямую указывать тип переменной, а также вы можете совершенно без проблем присвоить одной переменной несколько типов. JavaScript определит тип, основываясь на значении, которое вы присвоили переменной, а также будет свободно переключаться между разными типами в зависимости от содержания, в котором они используются. Результат работы кода из таков:
Hello Adam. Today is sunny. I like apples
Использование примитивных типовВ JavaScript представлено мало примитивных типов. Это string , number и boolean . Кажется, что список очень короткий, но JavaScript очень гибко управляется с этими тремя типами.
Работа со строкамиЗначения для типа string определяются с использованием одинарных или двойных кавычек, как показано в .
Листинг 5-7: Определение строковых переменных Example var firstString = "This is a string"; var secondString = "And so is this";Знаки кавычек, которые вы используете, должны совпадать. Например, вы не можете начать строку с одинарной кавычки, а закончить двойными.
Работа с булевскими переменнымиБулев тип (boolean) имеет два значения: true и false . В показано, как используются оба значения. Булев тип наиболее полезен при работе с условными операторами, которые я опишу далее в этой главе.
Листинг 5-8: Определение булевских значений Example var firstBool = true; var secondBool = false; Работа с числамиТип number используется для представления как целых чисел , так и чисел с плавающей точкой (известных также как вещественные числа ). В представлен пример использования этого типа.
Листинг 5-9: Определение числовых значений Example var daysInWeek = 7; var pi = 3.14; var hexValue = 0xFFFF;Вам не нужно указывать, какой вид числа вы используете. Вы просто присваиваете нужное значение, и JavaScript его обрабатывает соответствующим образом. В листинге я определил значение для целого числа, для числа с плавающей точкой и указал шестнадцатеричное значение при помощи приставки 0x .
Создание объектовJavaScript поддерживает концепцию объектов, и есть различные пути их создания. В показан простой пример создания объекта.
Листинг 5-10: Создание объекта Example var myData = new Object(); myData.name = "Adam"; myData.weather = "sunny";Я создал объект new Object() , а результат (только что созданный объект) я назначил переменной myData . Как только объект создался, я могу назначить ему свойства, просто указав значение, например, так:
myData.name = "Adam";
До этого выражения у моего объекта не было свойства name . После того как выражение было выполнено, возникло свойство и ему было присвоено значение Adam . Прочитать значение свойства можно, если объединить имя переменной и имя свойства точкой, вот так:
document.writeln("Hello " + myData.name + ". ");
Использование литералов объектаМожно определить объект и его свойства за один шаг, используя формат литерала объекта. В показано, как это делается.
Листинг 15-11: Использование формата литерала объекта Example var myData = { name: "Adam", weather: "sunny" }; document.writeln("Hello " + myData.name + ". "); document.writeln("Today is " + myData.weather + ".");Каждое свойство, которое вы хотите определить, отделяется от своего значения при помощи двоеточия (:), а сами свойства разделяются запятой (,).
Использование функций как методовТак же, как вы добавляете к объекту свойства, вы можете добавить к объекту функции. Функция, которая принадлежит объекту, известна как метод . Это одна из возможностей JavaScript, которые я люблю больше всего. Я не знаю, почему, но я считаю этот способ элегантным и бесконечно приятным. В показано, как можно добавлять методы таким вот способом.
Листинг 15-12: Добавление метода объекту Example var myData = { name: "Adam", weather: "sunny", printMessages: function () { document.writeln("Hello " + this.name + ". "); document.writeln("Today is " + this.weather + "."); } }; myData.printMessages();В этом примере я использовал функцию, чтобы создать метод printMessages . Обратите внимание, что ссылаясь на свойство, определенное в объекте, я использовал ключевое слово this . Когда функция используется в качестве метода, функция передается объекту, в котором был вызван метод, в качестве аргумента при помощи специальной переменной this . Результат работы кода таков:
Hello Adam. Today is sunny.
Совет
JavaScript может гораздо больше чего предложить, когда дело доходит до создания и управления объектами, но вам не нужны эти функции для работы с HTML5. Обратите внимание на книги, которые я рекомендовал в начале этой главы, если вы хотите углубиться в изучение этого языка.
Работа с объектамиКак только вы создали объект, вы можете сделать с ним несколько вещей. В следующих разделах я расскажу о тех возможностях, которые будут полезны в далее этой книге.
Чтение и изменение значений свойствНаиболее очевидной вещью, которую мы можем сделать с объектом, является чтение и изменение значений свойств, которые определяет объект. Для этого существует два различных синтаксических стиля, они оба представлены в .
Листинг 5-13: Чтение и изменение свойств объекта Example myData.name = "Joe"; myData["weather"] = "raining"; document.writeln("Hello " + myData.name + "."); document.writeln("It is " + myData["weather"] );Первый способ таков, что его знают большинство программистов, и я его использовал в предыдущих примерах. Вы объединяете имя объекта и имя свойства, используя точку (точечная нотация), вот так:
myData.name = "Joe";
Второй способ – это "массивная" нотация (как при обращении к индексу массива), которая выглядит следующим образом:
myData["weather"] = "raining";
В данном случае имя свойства вы заключаете в квадратные скобки ([ и ]). Это может быть очень удобным способом доступа к свойству, потому что вы можете обратиться к нужному свойству, используя переменную:
var myData = { name: "Adam", weather: "sunny", }; var propName = "weather"; myData[propName ] = "raining";
Это основа для перечисления свойств объекта, о чем я сейчас расскажу.
Перечисление свойств объектаВы перечисляете свойства объекта, используя оператор for...in . В показано, как можно использовать этот оператор.
Листинг 5-14: Перечисление свойств объекта Example var myData = { name: "Adam", weather: "sunny", printMessages: function () { document.writeln("Hello " + this.name + ". "); document.writeln("Today is " + this.weather + "."); } }; for (var prop in myData) { document.writeln("Name: " + prop + " Value: " + myData); }В цикле for...in в блоке кода выполняются выражения для каждого свойства объекта myData . Переменной prop назначено имя свойства, обрабатываемого при каждой итерации. Я использовал "массивную" нотацию, чтобы получить значение свойства объекта. Результат работы кода из листинга таков (я отформатировал результаты, чтобы их было проще читать):
Name: name Value: Adam Name: weather Value: sunny Name: printMessages Value: function () { document.writeln("Hello " + this.name + ". "); document.writeln("Today is " + this.weather + "."); }
Из результата видно, что перечислена также функция, которую я определил как метод. Это результат того, что JavaScript гибко работает с функциями, и того, что при их обработке методы сами считаются свойствами объекта.
Добавление и удаление свойств и методовДаже если вы использовали литералы объекта, вы все равно можете определить для объекта новые свойства. Пример представлен в .
Листинг 5-15: Добавление нового свойства объекту Example var myData = { name: "Adam", weather: "sunny", }; myData.dayOfWeek = "Monday";Как вы уже догадались, в объект также можно добавить новый метод, присвоив значению свойства функцию, как показано в .
Листинг 5-16: Добавление нового метода в объект Example var myData = { name: "Adam", weather: "sunny", }; document.writeln("Hello"); };Вы можете удалить свойство или метод из объекта, используя ключевое слово delete , как показано в .
Листинг 5-17: Удаление свойства из объекта Example var myData = { name: "Adam", weather: "sunny", }; myData.sayHello = function() { document.writeln("Hello"); }; delete myData.name; delete myData["weather"]; delete myData.sayHello; Как определить, есть ли у объекта свойствоВы можете определить, есть ли у объекта свойство, используя выражение in , как показано в .
Листинг 5-18: Проверка на то, есть ли у объекта свойство Example var myData = { name: "Adam", weather: "sunny", }; var hasName = "name" in myData; var hasDate = "date" in myData; document.writeln("HasName: " + hasName); document.writeln("HasDate: " + hasDate);В этом примере я сделал проверку для свойства, которое существует, и для свойства, которого нет. Значение переменной hasName будет true , значение свойства hasDate – false .
Переменные и функцииКогда в главе 2 мы обсуждали использование переменных, то не затронули понятие области их действия. Возвратимся к теме переменных и обсудим, как работают вместе переменные и функции.
Область действия переменных и глобальные переменныеВо втором разделе данной главы, говоря о передаваемых в функцию парамет рах, мы отметили, что переменные могут быть отправлены в функцию в каче стве.аргументов. Однако можно использовать и переменную из функции, если это глобальная переменная. Переменная становится таковой с помощью ин струкции global. Рассмотрим область действия, или область видимости пере менной. Область действия переменной это та часть программы, в которой переменная существует. По умолчанию переменные, которые вы создаете в сце нарии, имеются, пока работает ваш сценарий. И наоборот, переменные сре ды (такие как SOSTYPE) существуют на сервере от момента запуска до выклю чения.
Впрочем, функции создают новую область видимости. Переменные функ
ции аргументы функции и любые переменные, определенные внутри функ
ции, существуют только в этой функции и недоступны извне. Другими слова
ми, это локальные переменные с локальной областью действия. Подобным
образом к внешней переменной можно обратиться, только передав ее в функ
цию как аргумент или же с помощью инструкции global. Последняя приблизи
тельно означает: «Я хочу, чтобы эта переменная в функции была такой же, как
и вне функции». Другими словами, глобальная инструкция превращает локальную
переменную с областью видимости внутри функции в глобальную переменную
с областью действия в пределах всей программы. Любые изменения глобаль
ной переменной в функции автоматически передаются в переменную с тем же
именем, когда она используется вне функции (после вызова функции, конеч
но), без помощи команды return.
Синтаксис инструкции global следующий:
Function FunctionName (SArgument) {
global $Variable;
statement(s);
Рассмотрим подробнее, что же дает нам инструкция глобализации. Обыч ная переменная, даже если ее имя внутри функции полностью совпадает с та ким же именем в основной части программы, представляет собой совершенно другую структуру (возможно, с другим значением, нежели переменная вне функ ции). Пусть строка вызова функции выглядит как FunctionName ($Valuel) , а функция определена как FunctionName ($Argumentl). В момент обращения к функции РНР устанавливает значение $Argumentl равным значению $Valuel, и далее первое используется в теле функции. Если вы измените значение $Argumentl внутри функции, это никак не отразится на значении $Valuel. Если бы имена переменных случайно совпали, это бы ничего не изменило: они все равно являются двумя разными переменными. Область действия одной внут ри функции, другой вне функции. Поэтому, чтобы избежать путаницы, при написании функций мы предусмотрительно использовали различные имена пе ременных в строке определения функции и в строке ее вызова.
Мы затронули эту тему, потому что на самом деле необязательно применять разные имена. Для удобства можно использовать одно и то же имя в строке функции и в строке вызова (тогда легко запомнить передаваемые аргументы), но помните, что это разные переменные. То, что происходит со значением переменной внутри функции, остается в функции. И наоборот: изменения пе ременной вне функции не действуют на переменную с тем же именем внутри функции. Но, если вы сделали переменную глобальной с помощью инструкции global, она становится одной и той же переменной и внутри, и снаружи. Использование инструкции global
Переменные $Price и $TaxRate будут введены в функцию как $Cost и $Тах с помощью инструкции global, поэтому нет необходимости использовать их как аргументы.
global $Tax;
Они «Прикажут» функции использовать переменные $Cost и $Тах, которые уже существуют вне ее.
$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 в функции это совсем не та перемен ная, как переменная с тем же именем, но находящаяся вне функции
");
Для показа того, что инструкция global вводит переменную в функцию и что любые реализованные в функции изменения применяются глобально, распечатаем значение $Тах до и после вызова функции.
$TotalCost = CalculateTotal ($Quantity, $Discount);
Так как функция принимает теперь только два аргумента, передача четырех аргументов вызовет ошибку.
is now $$Tax .\n
");
Если бы не было инструкции global, то значения, распечатанные здесь и выше, были бы одинаковыми. Но, поскольку глобальная переменная $Тах была модифицирована в функции, распечатанные значения будут разными.
Листинг 9.7 т Так как функции CalculateTotal требуются значения пере менных $Cost и $Тах, они легко могут быть включены с помощью инструкции global. Помните, переменные больше нельзя передавать как аргументы это может запутать программиста и вызвать определенные ошибки в работе при ложения.
1
22
23
24 Calculation Functions
25
26
27