Введение: Почему PHP кажется сложным, хотя это не так
Вы решили изучать PHP. Отличный выбор! Этот язык питает более 78% всех сайтов в интернете — от маленьких блогов до гигантов вроде Facebook (в его ранние годы). Но почему же столько новичков бросают PHP после первой же недели?
Ответ прост: ошибки при изучении PHP превращают увлекательный процесс в адскую головоломку. Код перестаёт работать, вы получаете белый экран вместо страницы, а в голове — каша из $, $_POST и mysqli_connect().
В этой статье мы разберём 10 самых частых граблей, на которые наступают начинающие разработчики. Вы узнаете не только что вы делаете не так, но и как это исправить. Поехали!
1. Игнорирование базового синтаксиса и точек с запятой
Самая распространённая типичная ошибка PHP — отсутствие точки с запятой ; в конце каждой инструкции. В PHP это не просто формальность, а строгое правило синтаксиса.
Пример ошибки:
<?php
echo "Привет, мир"
echo "Как дела?"; // Ошибка: Parse error: syntax error, unexpected 'echo'
?>
Как правильно:
<?php
echo "Привет, мир";
echo "Как дела?";
?>
Совет: Всегда ставьте точку с запятой после echo, присваивания переменной, вызова функции. Исключение — только конструкции if, while, for (после их закрывающей фигурной скобки точка не нужна).
2. Путаница между одинарными и двойными кавычками
Многие новички считают, что разницы нет. Но в PHP проблемы с синтаксисом PHP часто возникают именно из-за кавычек.
Разница:
- Одинарные кавычки (
' ') — воспринимают строку буквально. Переменные внутри не обрабатываются. - Двойные кавычки (
" ") — интерполируют переменные (подставляют их значения).
Пример путаницы:
<?php
$name = "Анна";
echo 'Привет, $name'; // Выведет: Привет, $name (а не "Привет, Анна")
echo "Привет, $name"; // Выведет: Привет, Анна
?>
Золотое правило: Если внутри строки нет переменных — используйте одинарные кавычки. Они быстрее и безопаснее.
3. Смешивание HTML и PHP в одной каше
Одна из главных ошибок новичков PHP — писать весь код в одном файле, перемешивая логику и представление.
Плохой код:
<?php
$users = ["Иван", "Мария", "Петр"];
echo "<ul>";
foreach($users as $user) {
echo "<li>$user</li>";
}
echo "</ul>";
?>
Хороший подход (разделение логики и шаблона):
<?php
// index.php
$users = ["Иван", "Мария", "Петр"];
require 'templates/users-list.php';
?>
<!-- templates/users-list.php -->
<ul>
<?php foreach($users as $user): ?>
<li><?= htmlspecialchars($user) ?></li>
<?php endforeach; ?>
</ul>
Совет: Используйте шаблонизаторы (Twig, Blade) или хотя бы разделяйте логику (controller.php) и отображение (view.php).
4. Пренебрежение безопасностью: SQL-инъекции
Это опасные ошибки PHP, которые могут стоить вам данных. Многие новички пишут запросы прямо в строку, подставляя пользовательские данные.
Уязвимый код:
<?php
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id"; // ОПАСНО!
$result = mysqli_query($conn, $query);
?>
Если злоумышленник передаст ?id=1 OR 1=1, он получит всех пользователей.
Безопасный код (с подготовленными запросами):
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $_GET['id']);
$stmt->execute();
$result = $stmt->get_result();
?>
Запомните: Никогда не доверяйте пользовательским данным. Всегда используйте подготовленные запросы (PDO или MySQLi).
5. Неправильная работа с суперглобальными массивами
Проблемы с PHP часто возникают из-за непонимания $_GET, $_POST, $_SESSION. Новички путают методы отправки форм.
Пример ошибки:
<form method="post">
<input type="text" name="email">
</form>
<?php
// Ошибка: данные пришли POST, а читаем из GET
$email = $_GET['email']; // Undefined array key "email"
?>
Как правильно:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $_POST['email'] ?? ''; // Используем null coalescing operator
// ... обработка
}
?>
Совет: Проверяйте метод запроса и используйте оператор ?? для безопасного доступа к массивам.
6. Отсутствие обработки ошибок
Белый экран смерти — это когда PHP-скрипт упал, но вы не видите ошибку. Ошибки при изучении PHP становятся незаметными, если отключена их демонстрация.
Как включить отображение ошибок (на время разработки):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
Лучшая практика — использование try-catch:
<?php
try {
// Потенциально опасный код
$result = 10 / 0;
} catch (DivisionByZeroError $e) {
echo "Ошибка: " . $e->getMessage();
// Логируем ошибку в файл
error_log($e->getMessage(), 3, 'errors.log');
}
?>
Запомните: На production-сервере