Константы в PHP. Строковые, магические (предопределённые) константы.

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

Что такое константы?

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

difference-between-constants-and-variables-1.png

Калькуляторы дружат с константами

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

  • Вводим на калькуляторе первое число, например, «2»,
  • нажимаем на знак «плюс»,
  • вводим второе число, скажем, «3» (см. рис. 1),
  • и затем нажимаем знак «=».

Что получим? Очевидно, значение «5». Арифметика. Но с использованием компьютерной техники – калькулятора.

константа на калькуляторе

Рис. 1. Суммирование констант 2+3 на калькуляторе (Windows 7)

Не будем дальше углубляться в возможности калькуляторов. Например, можно было бы рассмотреть более сложные калькуляторы: для инженеров, для программистов, для обработки статистических данных и пр. (см. рис. 2).

калькуляторы в Windows 7

Рис. 2. Некоторые виды калькуляторов, имеющихся в Windows 7

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

Функция constant()

Как указано по имени, эта функция вернет значение константы. Это полезно, когда вы хотите получить значение константы, но вы не знаете ее имени, т. е., оно хранится в переменной или возвращается функцией.

constant() пример

<?php define(«MINSIZE», 50); echo MINSIZE; echo constant(«MINSIZE»); // то же, что и предыдущая строка?>

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

Макроопределения

Мы можем единожды указать, что левый светодиод — это пин 13, правый — пин 12,а переключать состояния нужно каждые X миллисекунд. Для этого каждому значениюназначается понятное имя, которое затем и используется для обращения:

#define LEFT_LED 13#define RIGHT_LED 12#define SWITCH_TIME 2000 void setup(){ pinMode(LEFT_LED, OUTPUT); pinMode(RIGHT_LED, OUTPUT);} void loop(){ digitalWrite(LEFT_LED, HIGH); digitalWrite(RIGHT_LED, LOW); delay(SWITCH_TIME);  digitalWrite(LEFT_LED, LOW); digitalWrite(RIGHT_LED, HIGH); delay(SWITCH_TIME);}

Всё, теперь для изменения параметров устройства достаточно изменить нужныезначения в начале программы и не думать об изменениях в самой логике. Крометого выражение вроде digitalWrite(RIGHT_LED, LOW) гораздо болееинформативно нежели digitalWrite(12, LOW) и даёт чёткое понимание того,что имел в виду автор.

Конструкция #define называется макроопределением. Она говориткомпилятору о том, что всякий раз, когда он видит указанное имя, стоитиспользовать на этом месте указанное значение.

Обратите внимание: макроопределения #define не завершаются точкой сзапятой в конце строки. Дело в том, что #define — это не обычноевыражение, а так называемая препроцессорная директива. Подстановкаконкретных значений вместо имён происходит ещё до компиляции, на стадиипредварительной обработки исходного файла. На этой стадии, по сути, компиляторпроделывает операцию как в текстовом редакторе: «Найти все и заменить». Просторезультат этой операции не сохраняется в файл, а тут же им используется длянепосредственной компиляции.

Если бы вы поставили ; после #define, в результате обработки компиляторувидел бы такой код:

// Если завершать директивы точками с запятой…#define LEFT_LED 13;#define RIGHT_LED 12;#define SWITCH_TIME 2000; // …они появятся в самом неподходящем местеvoid setup(){ pinMode(12;, OUTPUT); pinMode(13;, OUTPUT);} void loop(){ digitalWrite(12;, HIGH); digitalWrite(13;, LOW); delay(2000;);  digitalWrite(12;, LOW); digitalWrite(13;, HIGH); delay(2000;);}

Попытка скомпилировать такой скетч приведёт к ошибке.

Встроенные макроопределения

Вы могли догадаться, что уже знакомые нам значения HIGH, LOW,OUTPUT — это также не что иное как макроопределения. Просто #defineдля них написан в некотором другом месте и мы можем просто сразу имипользоваться.

На самом деле код мигания светодиодом:

void setup(){ pinMode(13, OUTPUT);} void loop(){ digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(900);}

с точки зрения компилятора есть ни что иное как:

void setup(){ pinMode(13, 1);} void loop(){ digitalWrite(13, 1); delay(100); digitalWrite(13, 0); delay(900);}

Если вы откроете файл hardware/arduino/cores/arduino/Arduino.h в вашемдистрибутиве Arduino IDE, вы сможете увидеть, что HIGH — этомакроопределение 1, LOW — 0, OUTPUT — 1 и т.д. Эти значенияиспользуются настолько часто, что они встроены таким образом.

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

Об именах макроопределений

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

// плохо#define ledpin 13#define led_pin 13#define LedPin 13 // хорошо#define LED_PIN 13

Это настолько привычное правило, что вы можете ввести в заблуждение других,если не будете его придерживаться. Опять же, следование общепринятым канонам —признак профи.

Стоит отметить, что язык C++, как и многие другие считает строчные и заглавныебуквы различными, поэтому если к макроопределению LED_PIN вы затемпопытаетесь обратиться, написав led_pin будет выдана ошибка компилятора отом, что он не понимает что такое led_pin. То же самое касается имёнфункций и всего остального.

Обращение к константам внутри класса

Внутри класса также можно обратится к константе через ::self, вот так:

<?php class Test { // Задаем константу: const CONSTANT = ‘test’; // Сделаем метод для получения значения константы: function getConstant() { return self::CONSTANT; } }?>

Воспользуемся нашим методом:

<?php $test = new Test; echo $test->getConstant(); // выведет ‘test’?>

Что такое переменные?

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

Что такое переменная в C-программировании

Переменная — это контейнер для хранения данных. Это имя для обозначения области хранения. Каждая переменная имеет уникальное имя для ее идентификации. Имя переменной может состоять из прописных и строчных букв, цифр и подчеркиваний. Хорошей практикой является использование значимых имен для переменных. C является регистрозависимым языком. Поэтому имя переменной ширина отличается от ШИРИНА.

Переменная может хранить определенный тип данных. Переменные типа int могут хранить целое число (5, 20 и т. Д.). «Char» может хранить один символ, такой как «A», «a» и т. Д. Кроме того, «float» используется для хранения одного значения с плавающей точкой прецессии, а «double» используется для хранения значений с плавающей запятой двойной точности. Смотрите ниже примеры.

int width = 10;

«Ширина» — это переменная, которая может хранить и целые числа. Ему присваивается значение 10.

буква Char = ‘K’;

Буквенная переменная может хранить тип данных char, и ей присваивается значение «K».

двойная площадь = 30,25;

Переменная область может хранить плавающую точку двойной точности. Ему присваивается значение 30,25.

Смотрите ниже программу.

difference-between-constant-and-variable-in-c-programming-2.jpg

Рисунок 3: C-программа с переменными

Ширина и длина являются переменными, которые могут хранить целые числа. Им присваиваются значения 10 и 20. Значения этих переменных используются для расчета площади и периметра. Наконец, результаты выводятся на консоль.

В целом, переменная является символическим представлением места в памяти. Возможно изменить значение переменной позже.

Другие решения

Других решений пока нет …

Магические константы PHP

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

Есть пять магических констант, которые изменяются в зависимости от того, где они используются. Например, значение __LINE__ зависит от строки, в которой он используется в вашем скрипте. Эти специальные константы не чувствительны к регистру и являются следующими:

Задача

Напишите скрипт, который:
1. Создаёт константу PASSWORD со значением ioef84Fe#.
2. Выводит значение константы внутри тега div.

<?phpdefine(‘PASSWORD’, ‘ioef84Fe#’);echo ‘<div>’, PASSWORD, ‘</div>’;
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: