---
title: PHP. Переменные и константы
slideOptions:
transition: slide
---
# PHP. Переменные и константы
###### tags: `skillfactory`
---
## "Тезисы":
1. Зачем нужны переменные и константы
2. Переменные
3. Константы
4. Типы данных
5. Нейминг
---
## Зачем нужны переменные и константы
---
В большинстве языков программирования существуют переменные и константы.
Они необходимы для хранения каких-либо данных во время выполнения программы.
---
Основное отличие переменных от констант - переменной может быть присвоено значение сколько угодно раз, константе же присваивается значение единожды.
---
## Переменные
---
В PHP для того, чтобы создать переменную, требуется просто присвоить ей значение:
```php
<?php
$var = 'Значение';
$a = 5;
$price = 399.99;
```
---

---
```php
<?php
$price = 399.99;
echo $price;
// -> 399.99
```
---
Все наименования переменных в PHP обязательно начинаются с символа **$**.
```php
<?php
price = 399.99;
echo $price;
// -> Parse error: syntax error
```
---
Такая запись помогает определить наличие переменной в строке:
```php
<?php
$price = 399.99;
echo "Стоимость товара $price рублей";
// -> Стоимость товара 399.99 рублей
```
---
В имени переменной можно использовать:
* буквы "латиницы";
* цифры - но наименование (после **$** ) не может начинаться с цифры;
* символ подчеркивания.
```php
<?php
$price = 399.99;
$discont10 = 10;
$currency_genitive = 'рублей';
echo "Стоимость товара без скидки ";
echo "$discont10% составляет $price $currency_genitive";
// -> Стоимость товара без скидки 10% составляет 399.99 рублей
```
---
Так же можно использовать любые символы, код ASCII которых больше 127 - однако, это настоятельно не рекомендуется.
```php
<?php
$стоимость = 399.99;
echo "Стоимость товара $стоимость рублей";
// -> Стоимость товара 399.99 рублей
```
---
Наименования переменных чувствительны к регистру:
```php
<?php
$price = 399.99;
echo "Стоимость товара $PRICE рублей";
// -> Notice: Undefined variable: PRICE
// -> Стоимость товара рублей
```
---
Для того, чтобы изменить значение переменной, надо присвоить ей значение вновь:
```php
<?php
$price = 399.99;
echo "Стоимость товара $price рублей";
$price = 199.99;
echo "Стоимость товара $price рублей";
// -> Стоимость товара 399.99 рублей
// -> Стоимость товара 199.99 рублей
```
---
Можно присваивать значения не только конктретным значениям, но и результатам преобразований:
```php
<?php
$price_1 = 399.99;
$price_2 = 199.99;
$price_sum = $price_1 + $price_2;
$caption = "Стоимость товаров $price_sum рублей";
echo $caption;
// -> Стоимость товаров 599.98 рублей
```
---
При этом с правой стороны присваивания можно использовать и саму переменную:
```php
<?php
$price = 400.00;
$discont = 00.01;
$price = $price - $discont;
echo "Стоимость товаров со скидкой $price рублей";
// -> Стоимость товаров со скидкой 399.99 рублей
```
*Примечание: `$price = $price - $discont;` можно записать как `$price -= $discont;`*
---
## Константы
---
В PHP для создания констант используются две конструкции: `define()` и `const`
---
### define
Запись осуществляется следующим способом:
`define ($name, $value, $caseSen)`
, где:
`$name` - имя константы;
`$value` - значение константы;
`$caseSen` - необязательный параметр, определяющий, регистронезависимо ли имя константы или нет. По умолчанию - `true`(не зависит от регистра)
```php=
<?php
define('DRAFT_STATE', '10', true);
echo DRAFT_STATE;
echo '<br>';
echo draft_state;
// -> 10
// -> 10
```
Начиная с PHP 7.3.0, определение нечувствительных к регистру констант считается устаревшим. То есть использование регистронечуствительных констант - нежелательно.
---
### const
Задание константы через `const` выглядит проще, похоже на задание переменной:
```php=
<?php
const DRAFT_STATE = 10;
echo DRAFT_STATE;
// -> 3.14
```
---
### Отличия const и define
**1. Константы const должны быть объявлены в верхней области**
В отличие от `define()`, `const` должны быть объявлены в самой верхней области видимости, потому что они определяются при начале интепретации.
Это значит, что их нельзя объявлять внутри любых конструкций (условий, циклов, try-catch блоков и т.д.):
```php=
<?php
if (true) {
const DRAFT_STATE = 10;
}
echo DRAFT_STATE;
// -> Parse error: syntax error, unexpected 'const' (T_CONST) in ...
```
```php=
<?php
if (true) {
define('DRAFT_STATE', '10');
}
echo DRAFT_STATE;
// -> 10
```
**2. const всегда регистрозависима**
const всегда регистрозависима, в то время как `define()` позволяет создавать регистронезависимые константы:
```php=
<?php
const DRAFT_STATE = 10;
echo DRAFT_STATE;
echo '<br>';
echo draft_state;
// -> 10
// -> Warning: Use of undefined constant draft_state - assumed 'draft_state' (this will...
```
---
## Типы данных
---
Тип данных определяет возможные значения константы или переменной и операции, которые можно производить с ними.
Не смотря на то, что мы явно не определяем тип переменной в PHP, это не значит, что его нет.
```php
<?php
$price_1 = 349.00;
$price_2 = '349.00';
echo $price_1;
echo "\n";
echo $price_2;
// -> 349
// -> 349.00
```
В приведенном примере в первом случае при выводе число округлено, во втором случае является текстом, поэтому операция округления при выводе к нему не применяется.
---
В PHP используются типы данных:
Скалярные:
* boolean (логический тип)
* integer (целые числа)
* float (вещественные числа)
* string (строки)
Смешанные:
* array (массивы)
* object (объекты)
Специальные:
* resource (ресурсы)
* NULL
---
### boolean
Логический тип, переменные этого типа могут иметь только значения из очень короткого списка: `true` или `false`.
```php
<?php
$is_draft = true;
$published = false;
var_dump($is_draft);
var_dump($published);
// -> bool(true)
// -> bool(false)
```
---
### String
Традиционно, для работы с текстовыми данными применяются строки.
Строки бывают двух типов: в двойных кавычках и одинарных.
От типа кавычек зависит обработка строк интерпретатором - переменные в двойных кавычках заменяются значениями, а переменные в одинарных кавычках остаются неизменными.
```php=
<?php
$greeting_object = 'World';
$string_with_single_quote = 'Hello, $name!';
$string_with_double_quote = "Hello, $name!";
echo "<p>$string_with_single_quote</p>";
echo "<p>$string_with_double_quote</p>";
// -> Hello, $name!
// -> Hello, World!
```
---
### Integer
Целое 32-битное число со знаком
Возможные значения в диапазоне от -2 147 483 648 до 2 147 483 647.
```php=
<?php
$firstFactor = 2;
$secondFactor = 2;
$multiplication = $firstFactor * $secondFactor;
echo "$firstFactor * $secondFactor = $multiplication";
echo '<br><br>$firstFactor is ';
var_dump($firstFactor);
echo '<br>$secondFactor is ';
var_dump($secondFactor);
echo '<br>$multiplication is ';
var_dump($multiplication);
// -> 2 * 2 = 4
//
// $firstFactor is int(2)
// $secondFactor is int(2)
// $multiplication is int(4)
```
---
### Float (double, real)
Число с плавающей точкой.
Используется для вещественных чисел.
```php=
<?php
$firstFactor = 2.5;
$secondFactor = 5/2;
$multiplication = $firstFactor * $secondFactor;
echo "$firstFactor * $secondFactor = $multiplication";
echo '<br><br>$firstFactor is ';
var_dump($firstFactor);
echo '<br>$secondFactor is ';
var_dump($secondFactor);
echo '<br>$multiplication is ';
var_dump($multiplication);
// -> 2.5 * 2.5 = 6.25
//
// $firstFactor is float(2.5)
// $secondFactor is float(2.5)
// $multiplication is float(6.25)
```
---
### Array
`Array` - массив.
Массивы используются для хранения большого количества однородных данных.
В один массив, таким образом, можно записать несколько значений.
```php=
<?php
$shopping_list = [
'Хлеб',
'Молоко',
'Сахар',
];
var_dump($shopping_list);
// -> array(3) {
// [0]=>
// string(8) "Хлеб"
// [1]=>
// string(12) "Молоко"
// [2]=>
// string(10) "Сахар"
// }
```
---
### Object
Объекты представляют собой совокупность каких-либо сведений разных типов данных.
---
### Resource
`Resource` представляет собой специальную переменную, которая содержит ссылку на внешний ресурс. В качестве внешнего ресурса могут использоваться, например, файлы или подключения к базам данных. Ресурсы создаются и используются специальными функциями.
---
### NULL
`NULL` указывает, что значение переменной не определено. Использование данного значения полезно в тех случаях, когда мы, например, хотим указать, что переменная не имеет значения.
У переменной типа NULL может быть только одно значение - NULL
```php=
<?php
$name = 'Alex';
$helloAlex = "Hello, $name!";
$name = NULL;
$helloNull = "Hello, $name!";
echo "<p>$helloAlex</p>";
echo "<p>$helloNull</p>";
// -> Hello, Alex!
// -> Hello, !
```
---
## Нейминг
Практика показывает, что программный код нужно не только писать, но и читать. При чтении кода требуется его еще и понимать. Поэтому в современной разработке принято соблюдать некоторые правила для того, чтобы код было удобнее читать.
---
### 1. Придумывайте понятные и читаемые названия.
Старайтесь сохранять суть при именовании.
Не используйте кириллицу.
Избегайте русских слов в латинской транскрипции.
Не используйте слишком длинные наименования.
```php
<?php
// плохо
$c = 399.99;
$tcena = 399.99;
$цена = 399.99;
$something = 399.99;
$ljykfdnx = 399.99;
$price_with_nds_without_shipping_in_our_online_shop_now = 399.99;
// хорошо
$price = 399.99
```
---
### 2. Для переменных (кроме экземпляров объектов) используйте нижний_змеиный_регистр
Если наименование локальной переменной (переменной в функции) состоит из двух и более слов, все слова пишутся только в нижнем регистре и разделяются символом подчеркивания.
```php
<?php
// хорошо
$my_name = 'Алексей'
```
---
### 3. Для констант используйте ВЕРХНИЙ_ЗМЕИНЫЙ_РЕГИСТР
Если наименование константысостоит из двух и более слов, все слова пишутся только в ветрхнем регистре и разделяются символом подчеркивания.
```php
<?php
// хорошо
const NOT_ACTIVE_STATUS = 1;
```
---
## Задания на закрепление
1. Напишите программный код, выводящий информацию о скалярных типах данных.
2. Исправьте ошибки именований:
```
$p = 3.14;
$x = 2;
$resultat = $p * $x * $x;
echo $resultat;
```
---