--- title: PHP. Переменные и константы slideOptions: transition: slide --- # PHP. Переменные и константы ###### tags: `skillfactory` --- ## "Тезисы": 1. Зачем нужны переменные и константы 2. Переменные 3. Константы 4. Типы данных 5. Нейминг --- ## Зачем нужны переменные и константы --- В большинстве языков программирования существуют переменные и константы. Они необходимы для хранения каких-либо данных во время выполнения программы. --- Основное отличие переменных от констант - переменной может быть присвоено значение сколько угодно раз, константе же присваивается значение единожды. --- ## Переменные --- В PHP для того, чтобы создать переменную, требуется просто присвоить ей значение: ```php <?php $var = 'Значение'; $a = 5; $price = 399.99; ``` --- ![](https://i.imgur.com/i3lOXfu.png) --- ```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; ``` ---