0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Сайты и программы на PHP содержат тысячи, десятки тысяч и сотни тысяч строк кода. В таких условиях одним файлом с кодом не обойдешься - его нужно разбивать на части.</p>
1
<p>Сайты и программы на PHP содержат тысячи, десятки тысяч и сотни тысяч строк кода. В таких условиях одним файлом с кодом не обойдешься - его нужно разбивать на части.</p>
2
<p>Чтобы мы могли получить доступ к коду, который находится в других файлах, в PHP реализован<strong>механизм включения</strong>. Он состоит из четырех специальных конструкций:</p>
2
<p>Чтобы мы могли получить доступ к коду, который находится в других файлах, в PHP реализован<strong>механизм включения</strong>. Он состоит из четырех специальных конструкций:</p>
3
<ul><li>include</li>
3
<ul><li>include</li>
4
<li>include_once</li>
4
<li>include_once</li>
5
<li>require</li>
5
<li>require</li>
6
<li>require_once</li>
6
<li>require_once</li>
7
</ul><p>В этом уроке мы познакомимся с этими конструкциями. Начнем с конструкции require:</p>
7
</ul><p>В этом уроке мы познакомимся с этими конструкциями. Начнем с конструкции require:</p>
8
<p>Включение файла с кодом делает доступным его содержимое в том месте, куда он включается. В примере выше функция sayHi определяется в файле print.php и становится видна из файла index.php.</p>
8
<p>Включение файла с кодом делает доступным его содержимое в том месте, куда он включается. В примере выше функция sayHi определяется в файле print.php и становится видна из файла index.php.</p>
9
<p>То же самое относится не только к определению функций, но даже к переменным:</p>
9
<p>То же самое относится не только к определению функций, но даже к переменным:</p>
10
<p>Последний пример наталкивает на интересную мысль. Раз переменная появилась внутри файла index.php, то это значит, что конструкция require_once исполняет весь код, который находится во включаемом файле. В этом легко убедиться, поставив эксперимент:</p>
10
<p>Последний пример наталкивает на интересную мысль. Раз переменная появилась внутри файла index.php, то это значит, что конструкция require_once исполняет весь код, который находится во включаемом файле. В этом легко убедиться, поставив эксперимент:</p>
11
<p>Попробуем запустить:</p>
11
<p>Попробуем запустить:</p>
12
<p>Видно, что сначала выполнился код во включаемом файле, а только потом - код в файле index.php. Можно считать, что require_once берет содержимое включаемого файла и вставляет его вместо себя. То есть код выше работает так, как будто он написан следующим образом:</p>
12
<p>Видно, что сначала выполнился код во включаемом файле, а только потом - код в файле index.php. Можно считать, что require_once берет содержимое включаемого файла и вставляет его вместо себя. То есть код выше работает так, как будто он написан следующим образом:</p>
13
<p>Этот механизм рекурсивен по своей природе: если во включаемом файле есть другой включаемый файл, то сначала исполнится он. Такое поведение чем-то похоже на матрешку. Можно сказать, что весь код всех файлов проекта находится в одном пространстве и доступен для использования напрямую.</p>
13
<p>Этот механизм рекурсивен по своей природе: если во включаемом файле есть другой включаемый файл, то сначала исполнится он. Такое поведение чем-то похоже на матрешку. Можно сказать, что весь код всех файлов проекта находится в одном пространстве и доступен для использования напрямую.</p>
14
<p>Из всех четырех конструкций для включения файлов пользоваться имеет смысл только одной - require_once. Она обладает двумя важными свойствами:</p>
14
<p>Из всех четырех конструкций для включения файлов пользоваться имеет смысл только одной - require_once. Она обладает двумя важными свойствами:</p>
15
<ol><li>Если файл отсутствует, то эта конструкция приведет к ошибке, и программа остановит свое выполнение</li>
15
<ol><li>Если файл отсутствует, то эта конструкция приведет к ошибке, и программа остановит свое выполнение</li>
16
<li>Если в require_once передается файл, который уже был где-то загружен ранее, то она не будет выполнять этот файл повторно, но код этого файла все равно будет доступным</li>
16
<li>Если в require_once передается файл, который уже был где-то загружен ранее, то она не будет выполнять этот файл повторно, но код этого файла все равно будет доступным</li>
17
</ol><p>Эти два условия важны, потому что код, опирающийся на них, получается более качественным и простым. В отличие от require_once, остальные конструкции не отвечают этим требованиям:</p>
17
</ol><p>Эти два условия важны, потому что код, опирающийся на них, получается более качественным и простым. В отличие от require_once, остальные конструкции не отвечают этим требованиям:</p>
18
<ul><li>require исполняет включаемый файл каждый раз</li>
18
<ul><li>require исполняет включаемый файл каждый раз</li>
19
<li>include и include_once не приводят к ошибке в ситуации, когда файла не существует</li>
19
<li>include и include_once не приводят к ошибке в ситуации, когда файла не существует</li>
20
</ul><p>Этот урок нужен лишь для понимания происходящих внутри процессов. В реальном же коде за включение файлов отвечает<strong>Composer</strong>- менеджер управления зависимостями, который будем проходить в курсе про настройку окружения.</p>
20
</ul><p>Этот урок нужен лишь для понимания происходящих внутри процессов. В реальном же коде за включение файлов отвечает<strong>Composer</strong>- менеджер управления зависимостями, который будем проходить в курсе про настройку окружения.</p>
21
<p>Как вы увидите в следующих курсах, современный стандарт разработки на PHP полагается на механизм автозагрузки и запрещает использование явного включения файлов.</p>
21
<p>Как вы увидите в следующих курсах, современный стандарт разработки на PHP полагается на механизм автозагрузки и запрещает использование явного включения файлов.</p>