Подтвердить что ты не робот

Определяет ли порядок определения класса в PHP?

Если у меня есть несколько классов в разных php файлах, которые я включаю в один файл, а некоторые из этих классов имеют зависимости от других классов, имеет ли порядок, в котором они включены? Или, просто включайте их (в любом порядке), прежде чем они будут использованы все, что имеет значение?

4b9b3361

Ответ 1

Да, это важно Это упоминается как примечание в документации по наследованию объектов:

Если не используется автозагрузка, классы должны быть определены до их использования. Если класс расширяет другой, тогда родительский класс должен быть объявлен перед структурой дочернего класса. Это правило применяется к классам, которые наследуют другие классы и интерфейсы.

Я рекомендую использовать автозагрузку для разрешения зависимостей классов. Таким образом, классы загружаются только тогда, когда они действительно необходимы, и вам не нужно беспокоиться о включении каждого отдельного PHP файла вручную.

Вы должны сохранить каждый класс в своем собственном файле, чтобы это работало. Но это хороший способ поддерживать порядок в чистоте.

Ответ 2

Внутри 1 файла PHP вы можете объявлять функции/классы в любом месте и вызывать их в любом месте (внутри этого файла), порядок не имеет значения.

Как и для include, вы должны включить файл ДО того, как вы пытаетесь использовать объявленную функцию/класс в этом файле.

Ответ 3

Просто включите их, прежде чем они понадобятся, и все будет хорошо.

Ответ 4

Было бы важно, чтобы один класс пытался использовать другой, который еще не был разобран, тогда возникла ошибка. Лучший вариант - поместить классы в script, чтобы зависимость все еще была неповрежденной.

Ответ 5

Если все они находятся в одном файле, порядок не должен иметь значения. Есть некоторые редкие случаи (я видел с пространствами имен), где порядок имеет значение, но не беспокойтесь об этом слишком сильно, если вы не нажимаете конверт.

Попробуйте. Худшее, что может случиться, это то, что оно даст вам ошибку...

Ответ 6

Да, это имеет значение, и когда задействовано большое количество классов, это может вызвать проблемы. Использование автозагрузки нецелесообразно, если ваши сценарии производства должны включать 40 или 50 классов, что всегда происходит, если ваше приложение правильно спроектировано в соответствии с наилучшими методами ООП, и вам нужно иметь дело с формами и т.д.

Позвольте мне объяснить, почему этот порядок имеет значение. Если вы используете автозагрузчик, каждый раз, когда ключевое слово extends найдено, происходит попытка автозагрузки класса. Поэтому, если вы расширились до того, как был определен класс, который был расширен, он инициирует событие автозагрузки.

Когда вы разрабатываете приложение, используйте пользовательский автозагрузчик. Сделайте этот пользовательский автозагрузчик предоставлением информации о времени и используемой памяти. Он будет загружать все файлы классов один за другим и тратить много времени на это. Когда ваше приложение будет завершено, вы можете оптимизировать, сосредоточив много связанных классов в одном файле. Например, мой класс формы находится в class.form.php, и он не просто загружает класс формы. Он загружает еще 50 классов, связанных с формами. Таким образом, у меня есть все в одном файле, и когда я создаю новую форму(), автозагрузчик загружает класс .form.php, который включает в себя другие классы, которые обычно нужны форме (form_checkbox, form_input и т.д.), Поэтому, когда они необходимы, они не являются автозагрузчиками, поскольку они уже определены.

Вы можете создать PHP script, который будет обрабатывать, разрешать зависимости и упорядочивать все ваши классы в файле одного класса (class.form.php, используя мой пример), чтобы все они имели родительский класс, определенный перед ключевым словом extends (который запускает автозагрузку). Я запускаю php -w в конкатенированном файле, который разбивает комментарии и пробелы. Он уменьшил мои классы форм с 80 до 18K. Всякий раз, когда я использую форму, я создаю новую форму(), и она загружает классы, связанные с формой, на 18 КБ, что не является чрезмерным.

Первоначально я использовал командную команду linux, но она не работает. Вам нужен более умный script, который может разрешить родительский элемент каждого расширенного класса и правильно упорядочить классы в файле, который содержит много связанных классов.