PHP: полный мануал с примерами, функциями и ООП
Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Дерево руководства
Глава 467 · Официальная база → практическое применение
Сравнение типов и правила имён в пользовательском коде
Как не потерять смысл внешних данных при преобразовании и построить имена, понятные человеку и автозагрузчику.
Таблицы сравнения типов PHP
Таблицы сравнения нужны, когда одинаково выглядящие значения имеют разные типы. Для идентификаторов, токенов и статусов по умолчанию выбирают строгое сравнение; нестрогое используют только после явной нормализации по договору данных.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Следующие таблицы показывают работу PHP с типами переменныхи операторами сравнения при слабых и строгих сравнениях. Эта информация также относится к разделу документации по приведению типов. Написать раздел разработчиков PHP воодушивили комментарии пользователей и работа над фреймворком » BlueShoes.
Перед началом работы с таблицами вспомним базовую информацию о типах.
Наример, "42" — строка (string),
а 42 — целое число (int), false —
логическое значение (bool), а "false" — строка (string).
Замечание:
HTML-формы не передают логические переменные, целые или дробные числа: из форм приходят только строки. Функция is_numeric() проверяет, относится ли строка к числовой.
Замечание:
Выражение
if ($x), если переменную $x не определили, сгенерирует ошибку уровняE_NOTICE, поэтому переменную сначала инициализируют или в первом условии проверяют переменную языковой конструкцией empty() или isset().
Замечание:
Отдельные арифметические операции возвращают значение, которое представляет константа
NAN(англ. Not A Number, нечисло). Строгое или нестрогое сравнение такого значения с другим, включая его само, но исключаяtrue, вернётfalse:NAN != NANиNAN !== NAN. Примеры операций, которые возвращают константуNAN:sqrt(-1),asin(2)иacosh(0).
| Выражение | gettype() | empty() | is_null() | isset() | bool : if($x) |
|---|---|---|---|---|---|
$x = ""; | string | true | false | true | false |
$x = null; | NULL | true | true | false | false |
var $x; | NULL | true | true | false | false |
| $x не определена | NULL | true | true | false | false |
$x = []; | array | true | false | true | false |
$x = ['a', 'b']; | array | false | false | true | true |
$x = false; | bool | true | false | true | false |
$x = true; | bool | false | false | true | true |
$x = 1; | int | false | false | true | true |
$x = 42; | int | false | false | true | true |
$x = 0; | int | true | false | true | false |
$x = -1; | int | false | false | true | true |
$x = "1"; | string | false | false | true | true |
$x = "0"; | string | true | false | true | false |
$x = "-1"; | string | false | false | true | true |
$x = "php"; | string | false | false | true | true |
$x = "true"; | string | false | false | true | true |
$x = "false"; | string | false | false | true | true |
true до PHP 8.0.0.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
The following tables demonstrate behaviors of PHP types and comparison operators, for both loose and strict comparisons. This supplemental is also related to the manual section on type juggling. Inspiration was provided by various user comments and by the work over at » BlueShoes.
Before utilizing these tables, it's important to understand types and their
meanings. For example, "42" is a string
while 42 is an int. false is a
bool while "false" is a
string.
Note:
HTML Forms do not pass integers, floats, or booleans; they pass strings. To find out if a string is numeric, you may use is_numeric().
Note:
Simply doing
if ($x)while $x is undefined will generate an error of levelE_NOTICE. Instead, consider using empty() or isset() and/or initialize your variables.
Note:
Some numeric operations can result in a value represented by the constant
NAN. Any loose or strict comparisons of this value against any other value, including itself, but excepttrue, will have a result offalse. (i.e.NAN != NANandNAN !== NAN) Examples of operations that produceNANincludesqrt(-1),asin(2), andacosh(0).
| Expression | gettype() | empty() | is_null() | isset() | bool : if($x) |
|---|---|---|---|---|---|
$x = ""; | string | true | false | true | false |
$x = null; | NULL | true | true | false | false |
var $x; | NULL | true | true | false | false |
| $x is undefined | NULL | true | true | false | false |
$x = []; | array | true | false | true | false |
$x = ['a', 'b']; | array | false | false | true | true |
$x = false; | bool | true | false | true | false |
$x = true; | bool | false | false | true | true |
$x = 1; | int | false | false | true | true |
$x = 42; | int | false | false | true | true |
$x = 0; | int | true | false | true | false |
$x = -1; | int | false | false | true | true |
$x = "1"; | string | false | false | true | true |
$x = "0"; | string | true | false | true | false |
$x = "-1"; | string | false | false | true | true |
$x = "php"; | string | false | false | true | true |
$x = "true"; | string | false | false | true | true |
$x = "false"; | string | false | false | true | true |
true prior to PHP 8.0.0.
<?php
var_dump(0 == '0');
var_dump(0 === '0');
var_dump('0012' === '12');
Ожидаемый результат
bool(true)
bool(false)
bool(false)
Нестрогое сравнение выполняет преобразование. Для внешнего артикула ведущий ноль является частью значения, поэтому строковое строгое сравнение сохраняет смысл.
Имена в пользовательском коде
Имя — часть интерфейса кода. Оно должно передавать роль без чтения тела функции, не конфликтовать со встроенными символами и оставаться совместимым с автозагрузкой. Глобальное пространство особенно легко загрязнить зависимостями.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Документ содержит советы по выбору имён для идентификаторов в пользовательском PHP-коде. При выборе имён для кода, который создаёт символы в таблице символов глобального пространства имён, руководствуются рекомендациями раздела, чтобы избежать конфликтов кода с будущими версиями PHP.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
The following is a guide for how to best choose names for identifiers in userland PHP code. When choosing names for any code that creates symbols in the global namespace, it is important to take into account the following guidelines to prevent future versions of PHP from clashing with user symbols.
Глобальное пространство имён
Имя — часть интерфейса кода. Оно должно передавать роль без чтения тела функции, не конфликтовать со встроенными символами и оставаться совместимым с автозагрузкой. Глобальное пространство особенно легко загрязнить зависимостями.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Обзор конструкций, которыми создаются идентификаторы в глобальном пространстве имён.
функции
интерфейсы
константы, кроме констант классов
переменные, которые объявили вне функций и методов
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
Here is an overview of code constructs that go into the global namespace:
functions
classes
interfaces
traits
enumerations
constants (not class constants)
variables defined outside of functions and methods
Правила именования
Имя — часть интерфейса кода. Оно должно передавать роль без чтения тела функции, не конфликтовать со встроенными символами и оставаться совместимым с автозагрузкой. Глобальное пространство особенно легко загрязнить зависимостями.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Следующий список правил даёт общее представление о правах, которые проект PHP оставляет за собой при выборе имён для новых внутренних идентификаторов. Полное руководство по добавлению или изменению кода содержит официальный » Стандарт кодирования:
PHP владеет пространством имён верхнего уровня, но старается находить хорошие описательные имена и избегать очевидных коллизий.
Названия функций содержат подчёркивания между словами, тогда как названия классов составляют в стиле
camelCaseиPascalCase.PHP добавляет к глобальным символам модуля префикс в виде названия модуля. (В прошлом из этого правила часто делали исключения, из-за которых часть названий нарушает правила именования.) Приведём примеры названий с префиксом:
PREG_SPLIT_DELIM_CAPTURE
new DOMDocument()
strpos() (пример названия, которое возникло из-за ошибок прошлого)
new SplFileObject()
Однако итераторы и исключения просто получают постфиксы "
Iterator" и "Exception". Примеры:PHP резервирует символы, которые начинаются с двух подчёркиваний
__, как магические. Рекомендуется не создавать идентификаторы, которые начинаются с последовательности символов__, если только с целью использовать документированную магическую функциональность. Примеры:
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
The following list gives an overview of which rights the PHP project reserves for itself, when choosing names for new internal identifiers. The definitive guide is the official » PHP coding standards:
PHP owns the top-level namespace but tries to find decent descriptive names and avoid any obvious clashes.
Function names use underscores between words, class names use
PascalCase, and method names usecamelCase.PHP will prefix any global symbols of an extension with the name of the extension. (In the past, there have been numerous exceptions to this rule, so some existing names are not prefixed.) Examples:
PREG_SPLIT_DELIM_CAPTURE
new DOMDocument()
strpos() (example of a past mistake)
new SplFileObject()
Iterators and Exceptions are however simply postfixed with "
Iterator" and "Exception." Examples:PHP reserves all symbols starting with
__as magical. It is recommended not to create symbols starting with__in PHP, unless the intent is to use documented magical functionality. Examples:
<?php
namespace Store\Delivery;
final class Client {}
echo Client::class, "\n";
Ожидаемый результат
Store\Delivery\Client
Client::class возвращает полное имя без создания объекта. Namespace снижает риск столкновения, но соответствие каталогу PSR-4 задаёт Composer, а не сам PHP.
Практические советы по именам
Имя — часть интерфейса кода. Оно должно передавать роль без чтения тела функции, не конфликтовать со встроенными символами и оставаться совместимым с автозагрузкой. Глобальное пространство особенно легко загрязнить зависимостями.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Для написания кода с прицелом на будущее рекомендуют не замусоривать глобальное пространство имён переменными, функциями и классами. Такой подход помогает избегать конфликтов со сторонними библиотеками и будущими дополнениями к языку.
Названия функций и классов определяют в выделенном пространстве имён, чтобы избежать конфликтов имён.
<?php
namespace MyProject;
function my_function()
{
return true;
}
\MyProject\my_function();
?>По-прежнему придётся отслеживать действующие пространства имён, но как только разработчик определяется с пространством имён, которое будет использовать, он добавляет в него функции и классы, не думая о конфликтах имён.
Рекомендуется ограничивать количество переменных, которые добавляются в глобальную область видимости, чтобы предотвратить конфликты имён со сторонним кодом.
Замечание: Область видимости переменных
Из-за правил области видимости языка PHP, переменные, которые определили внутри функций и методов, не находятся в глобальной области действия переменных и поэтому не конфликтуют с другими переменными, которые определили в глобальной области действия переменных.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
In order to write future-proof code, it is recommended not to place many variables, functions or classes in the global namespace. This will prevent naming conflicts with third-party code as well as possible future additions to the language.
One common way to prevent naming conflicts of functions and classes is to add them to their own dedicated namespace.
<?php
namespace MyProject;
function my_function()
{
return true;
}
\MyProject\my_function();
?>Keeping track of the namespaces already in use is still necessary, but once a namespace has been chosen, all functions and classes can be added to it without having to think about conflicts again.
It is considered best practice to limit the number of variables added to the global scope in order to prevent naming conflicts with third-party code.
Note: Variable scoping
Because of PHP's scoping rules variables defined inside functions and methods are not in the global scope and as such cannot conflict with other variables defined in the global scope.
Имя и сравнение сохраняют смысл данных
Внешний код «0012» остаётся строкой, даже если похож на число. Метод markPaid() сообщает действие яснее set(). Эти решения встречаются вместе: сначала нормализуют тип по договору, затем используют строгое сравнение и передают значение через API с понятным именем.
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


