Работа с константами
Константы подобны переменным. Константам дают имена и присваивают значения. Однако константы являются постоянными; их значения не могут быть изменены в сценарии. После того как значение константы установлено, оно уже не меняется. Если ввести константу для обозначения погоды и установить для нее значение "солнечная", то впоследствии изменить это значение нельзя.
Создание константКонстанты описываются с помощью оператора define. Общий формат этого оператора таков:
define (" имя_константы" , " значение_константы"); Например, чтобы создать константу weather, используйте следующий синтаксис: define("weather", "солнечная");
Эта команда создает константу с именем weather и значением солнечная. При описании констант, как и при объявлении переменных, нужно использовать осмысленные имена. Однако, в отличие от переменных, имена констант не начинаются со знака доллара. В соответствии с негласным соглашением константам присваивают имена, состоящие из прописных букв латинского алфавита, чтобы их можно было легко отличать от переменных. Однако в языке РНР можно использовать и символы нижнего регистра.
Константа может содержать строку или число. Следующий оператор создает константу с именем INTEREST и присваивает ей значение .01:
define("INTEREST",.01); Константам нельзя давать имена, которые являются ключевыми словами РНР. Ключевые слова— это имена операторов РНР, например echo. Их нельзя использовать в качестве имен констант, потому что интерпретатор РНР обрабатывает их как команды PHP-сценария, а не как константы. РНР позволит описать константу с именем ECHO, не выдавая сообщения об ошибке, но при использовании такой константы возникнут проблемы. Например, если написать оператор вида echo ECHO;
Интерпретатор РНР запутается и выведет сообщение об ошибке. Он рассматривает константу как начало следующего оператора echo, но не может найти аргументы, чтобы завершить первую инструкцию echo. В набор ключевых слов РНР включены следующие: and | echo | list | as | else | new | break | empty | or | case | eval | print | class | exit | require | const | for | return | continue | foreach | switch | declare | function | use | default | global | var | die | if | while | do | include | |
Если вас беспокоит некоторый код, который выглядит хорошо, но отказывается корректно работать даже после многочисленных изменений, попробуйте изменить имя константы. Возможно, проблема состоит в том, что в качестве имени константы используется какое-то ключевое слово. Такое случается редко, но все же случается.
Следует отметить, что ключевые слова вполне можно использовать в качестве имен переменных, поскольку имена переменных начинаются с символа $. Однако лучше этим не пользоваться, так как такой стиль может запутать пользователей, которые будут работать с этим сценарием в дальнейшем.
Когда использовать константыЕсли вы знаете, что значение какой-либо переменной не будет изменяться на протяжении всего сценария, рационально использовать для его хранения константу. Применение константы позволяет выбрать длинное осмысленное имя и сделать сценарий более ясным. Например, название PRОDUCT_COST более понятно, чем число 20.50.
При использовании константы ее значение можно установить только один раз — в начале сценария. Если это значение когда-либо понадобится изменить, то при использовании константы это можно сделать только в одном месте, а не изменять значение переменной в двадцати различных местах сценария. Одна замена лучие, чем двадцать. Такой подход очень удобен и ускоряет работу.
Использование константы гарантирует, что данное значение не будет случайно изменено где-либо в сценарии.
Предположим, имеется сценарий, который переводит значения из одной валюты в другую, умножая количество долларов на обменный курс. Например, если курс обмена доллара США на канадский доллар составляет 1.52, можно записать следующий код:
‹?php $US_dollars = 20.00; $CA_dollars = $US_dollars * 1.52; ?›
|
Теперь предположим, что этот сценарий содержит 40 000 строк кода и что доллары США в нем конвертируются в канадские доллары в 50 различных местах. Значит, приведенный выше код встречается в 50 различных местах. Вы понимаете, что обменный курс изменяется практически каждую неделю, значит, каждую неделю вам придется редактировать этот сценарий, вручную изменяя число 1.52 на другое значение в 50 различных местах. Согласитесь, что это очень утомительно.
Гораздо лучше поместить обменный курс в переменную, чтобы изменять это значение только в одном месте. Тогда сценарий будет выглядеть следующим образом: ‹?php $rate = 1.52; $US_dollars = 20.00; $CA_dollars = $US_dollars * $rate; ?›
|
Значение $rate можно установить в начале сценария, а затем использовать его в 50 необходимых местах сценария. Естественно, это более удобная реализация. Если потребуется изменить курс, то значение переменной потребуется поменять только в одном месте. Например, если на следующей неделе обменный курс изменится на 1.53, вам придется изменить лишь первую строку сценария:
$rate = 1.53; Такой подход вполне пригоден. Однако $rate — не очень осмысленное имя. Вспомните, что сценарий содержит 40 000 строк кода и 2 строки, определяющие процедуру конвертирования валюты, которые используются в 50 различных местах. Предположим, где-то в середине сценария необходимо добавить некоторый код, определяющий степень заинтересованности. Предположим, где-нибудь в середине сценария вы случайно используете следующий код:
$interest_rate = 20; $rate = $interest_rate-1; $amount = $principal * $rate; Теперь всюду после этого фрагмента значение переменной $rate изменится. Значение 1.52, установленное в начале сценария, будет заменено числом 19, определяемым этим кодом. Этого можно избежать, выбирая более осмысленные имена переменных. А еще лучше использовать константу, как в следующем сценарии: ‹?php define("RATE", 1.52); $US_dolars = 20; $CA_dollars = $US_dollars * RATE; ?›
|
Теперь вы используете константу RATE, которую нельзя изменить в сценарии. Если в середине сценария вы попробуете добавить строку RATE = 20; интерпретатор РНР не позволит изменить значение. Таким образом можно избежать ошибок, которые легко допустить при использовании переменных.
На следующей неделе, когда обменный курс изменится на 1.53, этот сценарий придется лишь слегка отредактировать следующим образом:
‹?php define("RATE", 1.53); $US_dolars = 20; $CA_dollars = $US_dollars * RATE; ?›
|
Конечно, лучше использовать более осмысленное имя, например: define("US_TO_CA", 1.52); Имейте в виду, что ошибки, которые невозможно допустить при работе с простыми сценариями, состоящими из десяти строк, вполне возможны при работе со сценариями, включающими тысячи строк кода, особенно, если такой сценарий разрабатывает целая команда программистов.
Если вы уверены, что некоторое значение не будет изменяться на протяжении всего сценария, используйте константу. Если значение изменяется в процессе работы сценария, используйте переменную.
Отображение значений константЗначение константы можно вывести с помощью функции print_r следующим образом: print_r(US_TO_CA); Константу также можно вывести с помощью оператора echo: echo US_T0_CA; Если для вывода константы используется оператор echo, имя константы не нужно заключать в кавычки. Если имя константы все же заключить в кавычки, то на экране отобразится имя константы, а не ее значение. Константу можно вывести, как показано в предыдущем примере, или же с использованием круглых скобок. Можно формировать и более сложные команды вывода, разделяя выводимые объекты запятыми, как в следующем примере: echo "Курс обмена на канадский доллар составляет $",US_T0_CA;
В результате выполнения этой команды будет выведен следующий текст: Курс обмена на канадский доллар составляет $1.52
Использование встроенных константВ языке РНР определено множество встроенных констант, которые можно использовать в сценариях. Для примера, значением константы __LINE__ является номер текущей строки, а константа __FILE__ содержит имя соответствующего файла. (Встроенные константы начинаются с двух символов подчеркивания и заканчиваются тоже двумя символами подчеркивания.) Например, можно использовать команду: echo __FILE__ ;
ее результат выглядит примерно следующим образом: c:\program files\apache group\apache\htdocs\testvar2.php В языке РНР имеется и множество других встроенных констант. Например, констакты E_ALL и E_ERR0R можно использовать для управления процессом обработки ошибок в РНР. Эти константы описаны в следующем разделе.
|