3. Синтаксис и переменные
Введение
Заголовок раздела «Введение»PHP имеет простой и понятный синтаксис. В этом уроке мы изучим основы: как писать PHP-код, работать с переменными, выводить данные и делать комментарии.
Что вы узнаете
Заголовок раздела «Что вы узнаете»- Базовый синтаксис PHP
- Переменные и их именование
- Вывод данных (echo, print)
- Комментарии в коде
- Константы
- Интерполяция строк
Основы синтаксиса
Заголовок раздела «Основы синтаксиса»PHP-теги
Заголовок раздела «PHP-теги»PHP-код всегда заключается в специальные теги:
<?php// Ваш PHP-код здесь?>```text
**Важно:**- Открывающий тег `<?php` обязателен- Закрывающий тег `?>` можно опустить, если после него нет HTML- Рекомендуется НЕ ставить `?>` в конце чистых PHP-файлов (без HTML)
### Правильное использование тегов
```php<?php// ✅ Правильно: чистый PHP-файл без закрывающего тегаecho "Hello, World!";echo "Еще одна строка";```text
```php<?php// ✅ Правильно: PHP + HTMLecho "<h1>Заголовок</h1>";?><p>Это обычный HTML</p><?phpecho "<p>Снова PHP</p>";?>```text
```php<?php// ❌ Неправильно: пробелы после закрывающего тега могут вызвать проблемыecho "Test";?>
```text
### Точка с запятой
Каждая инструкция в PHP должна заканчиваться точкой с запятой:
```php<?phpecho "Привет"; // ✅ Правильноecho "Мир"; // ✅ Правильно
echo "Привет" // ❌ Ошибка: пропущена точка с запятойecho "Мир";?>```text
**Исключение:** Последняя инструкция перед `?>` может не иметь точки с запятой (но лучше ставить всегда).
### Регистр (case sensitivity)
PHP **частично** чувствителен к регистру:
```php<?php// ✅ Ключевые слова НЕ чувствительны к региструECHO "Test";Echo "Test";echo "Test"; // Все работает одинаково
// ✅ Имена функций НЕ чувствительныSTRLEN("test");strlen("test");StrLen("test"); // Все одинаково
// ❌ Переменные ЧУВСТВИТЕЛЬНЫ к регистру$name = "Иван";$Name = "Петр";$NAME = "Сергей";// Это три РАЗНЫЕ переменные!
echo $name; // Иванecho $Name; // Петрecho $NAME; // Сергей?>```text
**Рекомендация:** Используйте единый стиль — обычно lowercase для ключевых слов и функций.
## Переменные
Переменные в PHP начинаются со знака доллара `$`.
### Объявление переменных
```php<?php// Переменные объявляются при первом присваивании$name = "Алексей";$age = 25;$price = 99.99;$isActive = true;
// В PHP не нужно указывать тип — он определяется автоматически?>```text
### Правила именования переменных
```php<?php// ✅ Правильные имена$name$firstName$first_name$_private$number1$userName2
// ❌ Неправильные имена$1number // Не может начинаться с цифры$first-name // Нельзя использовать дефис$first name // Нельзя использовать пробелы$@name // Спецсимволы запрещены?>```text
**Best practices:**- Используйте осмысленные имена: `$userName` вместо `$un`- camelCase или snake_case (будьте последовательны)- Для констант: UPPER_SNAKE_CASE
### Примеры хороших имен
```php<?php// ✅ Хорошо: понятно, что хранится$productPrice = 1500;$isAuthenticated = true;$orderItemsCount = 5;
// ❌ Плохо: непонятно$p = 1500;$flag = true;$n = 5;?>```text
## Типы переменных (введение)
PHP — динамически типизированный язык, но у переменных есть типы:
```php<?php// Строка (string)$name = "Мария";$message = 'Привет!';
// Целое число (integer)$age = 30;$count = -5;
// Число с плавающей точкой (float/double)$price = 99.99;$pi = 3.14159;
// Булево значение (boolean)$isActive = true;$isDeleted = false;
// Массив (array)$colors = ["red", "green", "blue"];$user = ["name" => "Иван", "age" => 25];
// NULL (отсутствие значения)$emptyValue = null;
// Проверка типаecho gettype($name); // stringecho gettype($age); // integerecho gettype($isActive); // boolean?>```text
### Приведение типов
PHP автоматически преобразует типы при необходимости:
```php<?php$a = "5"; // Строка$b = 10; // Число
$result = $a + $b; // PHP преобразует "5" в 5echo $result; // 15
// Явное приведение типов$string = "123.45";$integer = (int)$string; // 123$float = (float)$string; // 123.45$boolean = (bool)$string; // true
echo $integer; // 123echo $float; // 123.45var_dump($boolean); // bool(true)?>```text
## Вывод данных
### echo — основной способ вывода
```php<?php// Простой выводecho "Привет, мир!";
// Вывод нескольких значенийecho "Привет", " ", "мир", "!";
// Вывод переменных$name = "Алексей";echo "Привет, $name!";
// Вывод HTMLecho "<h1>Заголовок</h1>";echo "<p>Параграф текста</p>";
// Вывод с конкатенацией$firstName = "Иван";$lastName = "Иванов";echo "Полное имя: " . $firstName . " " . $lastName;?>```text
### print — альтернатива echo
```php<?php// print работает почти как echoprint "Привет!";
// Главное отличие: print возвращает 1$result = print "Test"; // Выведет "Test" и вернет 1
// print не может выводить несколько аргументовprint "Hello", " World"; // ❌ Ошибкаecho "Hello", " World"; // ✅ Работает?>```text
**На практике:** Используйте `echo` — он быстрее и гибче.
### var_dump — вывод для отладки
```php<?php$data = ["name" => "Иван", "age" => 25, "active" => true];
// var_dump показывает тип и значениеvar_dump($data);// Выведет:// array(3) {// ["name"]=>// string(8) "Иван"// ["age"]=>// int(25)// ["active"]=>// bool(true)// }
// Для более читабельного вывода оберните в <pre>echo "<pre>";var_dump($data);echo "</pre>";?>```text
### print_r — человекочитаемый вывод
```php<?php$user = [ "name" => "Мария", "roles" => ["admin", "editor"]];
echo "<pre>";print_r($user);echo "</pre>";
// Выведет:// Array// (// [name] => Мария// [email] => [email protected]// [roles] => Array// (// [0] => admin// [1] => editor// )// )?>```text
## Интерполяция строк
PHP позволяет вставлять переменные прямо в строки.
### Двойные кавычки (интерполяция работает)
```php<?php$name = "Алексей";$age = 25;
// ✅ Переменные обрабатываютсяecho "Меня зовут $name, мне $age лет.";// Выведет: Меня зовут Алексей, мне 25 лет.
// Сложные выражения в фигурных скобках$user = ["name" => "Иван", "age" => 30];echo "Пользователь: {$user['name']}, возраст: {$user['age']}";?>```text
### Одинарные кавычки (без интерполяции)
```php<?php$name = "Алексей";
// ❌ Переменные НЕ обрабатываютсяecho 'Меня зовут $name';// Выведет: Меня зовут $name
// ✅ Используйте одинарные кавычки для обычных строкecho 'Это обычная строка без переменных';
// Для переменных нужна конкатенацияecho 'Меня зовут ' . $name;?>```text
### Когда использовать что
```php<?php// ✅ Двойные кавычки — когда есть переменные$greeting = "Привет, $name!";
// ✅ Одинарные кавычки — для обычных строк (чуть быстрее)$message = 'Постоянный текст';
// ✅ Конкатенация — для сложных выражений$fullName = $firstName . ' ' . $lastName;$url = $baseUrl . '/page/' . $pageNumber;?>```text
## Конкатенация строк
Оператор `.` соединяет строки:
```php<?php$firstName = "Иван";$lastName = "Петров";
// Простая конкатенация$fullName = $firstName . " " . $lastName;echo $fullName; // Иван Петров
// Конкатенация с присваиванием (.=)$message = "Привет";$message .= ", ";$message .= $firstName;$message .= "!";echo $message; // Привет, Иван!
// Сложное выражение$html = '<div class="user">';$html .= '<h2>' . $fullName . '</h2>';$html .= '<p>Email: ' . $email . '</p>';$html .= '</div>';echo $html;?>```text
## Комментарии
Комментарии игнорируются PHP и нужны для пояснений в коде.
### Однострочные комментарии
```php<?php// Это однострочный комментарий
echo "Hello"; // Комментарий в конце строки
# Тоже однострочный комментарий (но // предпочтительнее)?>```text
### Многострочные комментарии
```php<?php/* * Это многострочный комментарий * Может занимать несколько строк * Удобно для длинных пояснений */
/* * Функция для расчета скидки * * @param float $price Базовая цена * @param int $discount Процент скидки * @return float Цена со скидкой */function calculateDiscount($price, $discount) { return $price - ($price * $discount / 100);}?>```text
### PHPDoc — документирующие комментарии
```php<?php/** * Класс для работы с пользователями * * @package App\Models * @author Ваше имя * @version 1.0.0 */class User{ /** * Имя пользователя * * @var string */ private $name;
/** * Получить имя пользователя * * @return string Имя пользователя */ public function getName(): string { return $this->name; }}?>```text
### Лучшие практики комментирования
```php<?php// ✅ Хорошо: объясняет ПОЧЕМУ// Используем bcrypt вместо md5 для безопасности$hash = password_hash($password, PASSWORD_BCRYPT);
// ❌ Плохо: описывает очевидное// Присваиваем переменной значение 5$count = 5;
// ✅ Хорошо: предупреждает о неочевидном поведении// Важно: эта функция возвращает false, если файл не найден$content = file_get_contents($filename);
// ✅ Хорошо: TODO для будущих доработок// TODO: Добавить валидацию email$email = $_POST['email'];?>```text
## Константы
Константы — это значения, которые нельзя изменить после определения.
### Определение констант
```php<?php// Способ 1: функция define()define('SITE_NAME', 'Мой сайт');define('MAX_LOGIN_ATTEMPTS', 3);define('PI', 3.14159);
echo SITE_NAME; // Мой сайт
// Способ 2: const (PHP 5.3+, только в области видимости)const DB_HOST = 'localhost';const DB_USER = 'root';
// ❌ Константу нельзя изменитьdefine('TAX_RATE', 0.20);define('TAX_RATE', 0.25); // Warning: constant already defined?>```text
### Соглашения об именовании констант
```php<?php// ✅ Константы пишутся ЗАГЛАВНЫМИ буквамиdefine('MAX_FILE_SIZE', 5242880); // 5 MBdefine('ALLOWED_EXTENSIONS', ['jpg', 'png', 'gif']);
// Для логических групп используйте префиксыdefine('DB_HOST', 'localhost');define('DB_PORT', 3306);define('DB_NAME', 'myapp');?>```text
### Магические константы
PHP предоставляет специальные константы:
```php<?phpecho __FILE__; // Полный путь к файлуecho __DIR__; // Директория файлаecho __LINE__; // Номер текущей строкиecho __FUNCTION__; // Имя функцииecho __CLASS__; // Имя классаecho __METHOD__; // Имя метода класса
// Пример использованияfunction debugInfo() { echo "Выполняется функция: " . __FUNCTION__ . " в строке " . __LINE__;}?>```text
## Переменные переменных
PHP позволяет использовать значение одной переменной как имя другой:
```php<?php$var = "name";$$var = "Иван"; // Создает переменную $name = "Иван"
echo $name; // Иванecho $$var; // Иван (то же самое)
// Практический пример$field = "username";$$field = "admin"; // Создает $username = "admin"
echo $username; // admin?>```text
**Осторожно:** Переменные переменных усложняют код. Используйте только когда действительно необходимо.
## Область видимости переменных
Переменные имеют разную область видимости (scope).
### Глобальная область
```php<?php$globalVar = "Я глобальная";
function test() { // ❌ Внутри функции глобальные переменные недоступны echo $globalVar; // Warning: undefined variable}
test();?>```text
### Использование global
```php<?php$siteName = "Мой сайт";
function showSiteName() { global $siteName; // Делаем переменную доступной echo $siteName;}
showSiteName(); // Мой сайт?>```text
### Локальная область
```php<?phpfunction calculate() { $result = 10 + 20; // Локальная переменная echo $result;}
calculate(); // 30
// ❌ Вне функции переменная недоступнаecho $result; // Warning: undefined variable?>```text
## Примеры из реальной практики
### Пример 1: Приветствие пользователя
```php<?php$userName = "Алексей";$currentHour = date("H");
if ($currentHour < 12) { $greeting = "Доброе утро";} elseif ($currentHour < 18) { $greeting = "Добрый день";} else { $greeting = "Добрый вечер";}
echo "<h1>$greeting, $userName!</h1>";?>```text
### Пример 2: Расчет скидки
```php<?php$productName = "Ноутбук";$originalPrice = 50000;$discountPercent = 15;
$discountAmount = $originalPrice * ($discountPercent / 100);$finalPrice = $originalPrice - $discountAmount;
echo "<div class='product'>";echo "<h2>$productName</h2>";echo "<p>Цена: <s>$originalPrice руб.</s></p>";echo "<p>Скидка: $discountPercent%</p>";echo "<p class='price'>$finalPrice руб.</p>";echo "</div>";?>```text
### Пример 3: Генерация meta-тегов
```php<?php$pageTitle = "Главная страница";$pageDescription = "Добро пожаловать на наш сайт";$pageKeywords = "главная, сайт, php";
$metaTags = <<<HTML<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>$pageTitle</title><meta name="description" content="$pageDescription"><meta name="keywords" content="$pageKeywords">HTML;
echo $metaTags;?>```text
## WordPress контекст
В WordPress переменные и функции используются повсеместно.
### Вывод данных в теме
```php<?php// Получение данных через функции WordPress$site_name = get_bloginfo('name');$site_description = get_bloginfo('description');$current_year = date('Y');
// Вывод в шаблоне?><header> <h1><?php echo $site_name; ?></h1> <p><?php echo $site_description; ?></p></header>
<footer> <p>© <?php echo $current_year; ?> <?php echo $site_name; ?></p></footer>```text
### Кастомные переменные в WordPress
```php<?php// Получение мета-полей поста$post_views = get_post_meta(get_the_ID(), 'views', true);$featured_text = get_post_meta(get_the_ID(), 'featured_text', true);
// Использование в шаблонеif ($featured_text) { echo '<div class="featured">' . esc_html($featured_text) . '</div>';}
echo '<p>Просмотров: ' . absint($post_views) . '</p>';?>```text
### Настройки темы
```php<?php// Определение констант темыdefine('THEME_VERSION', '1.0.0');define('THEME_DIR', get_template_directory());define('THEME_URL', get_template_directory_uri());
// Использованиеecho '<link rel="stylesheet" href="' . THEME_URL . '/style.css?v=' . THEME_VERSION . '">';?>```text
## Практика
### Задание 1: Калькулятор возраста
Создайте скрипт, который:- Хранит год рождения в переменной- Вычисляет текущий возраст- Выводит красиво оформленное сообщение
```php<?php$birthYear = 1995;$currentYear = date("Y");$age = $currentYear - $birthYear;
echo "<p>Вы родились в $birthYear году. Вам $age лет.</p>";?>```text
### Задание 2: Карточка товара
Создайте переменные для товара (название, цена, наличие) и выведите HTML-карточку.
### Задание 3: Генератор приветствий
Создайте скрипт, который выводит разные приветствия в зависимости от дня недели.
### Задание 4: Комментирование
Возьмите любой код из предыдущих заданий и добавьте к нему подробные комментарии.
### Задание 5: Эксперименты
Попробуйте:- Создать переменные разных типов- Использовать `var_dump()` для их исследования- Поэкспериментировать с конкатенацией и интерполяцией- Создать несколько констант
## Онлайн-редакторы
Протестируйте примеры в онлайн-редакторах:- **PHPSandbox**: https://phpsandbox.io/- **3v4l**: https://3v4l.org/
## Итоги
В этом уроке вы изучили:
✅ **Базовый синтаксис PHP** — теги, точки с запятой, регистр✅ **Переменные** — создание, именование, типы✅ **Вывод данных** — echo, print, var_dump✅ **Интерполяция строк** — вставка переменных в текст✅ **Комментарии** — однострочные, многострочные, PHPDoc✅ **Константы** — создание неизменяемых значений✅ **Примеры из практики** — реальное применение
### Следующий шаг
Теперь мы готовы перейти к изучению типов данных: [Типы данных](/php/types/)
### Ключевые моменты
1. **$ начинает переменную** — всегда помните про доллар2. **Точка с запятой обязательна** — завершайте инструкции3. **Осмысленные имена** — код должен читаться как текст4. **Комментируйте сложное** — но не переусердствуйте5. **echo — ваш лучший друг** — для вывода и отладки
**Совет:** Создайте тестовый файл `playground.php` и экспериментируйте с примерами из урока!
---
**Готовы двигаться дальше?** Переходите к следующему уроку: [Типы данных](/php/types/)