Если у меня есть несколько классов в разных php-файлах, которые я включаю в один файл, а некоторые из этих классов имеют зависимости от других классов, имеет ли порядок, в котором они включены? Или, просто включайте их (в любом порядке), прежде чем они будут использованы все, что имеет значение?
Да, это важно.
Я рекомендую использовать автозагрузку для разрешения зависимостей класса. Таким образом, классы загружаются только тогда, когда они действительно необходимы, и вам не нужно беспокоиться о включении каждого файла PHP вручную.
Тем не менее, вы должны держать каждый класс в собственном файле, чтобы это работало. Но это хороший способ сохранить все чистое и чистое.
Внутри 1 PHP-файла вы можете объявлять функции / классы в любом месте и вызывать их в любом месте (внутри этого файла), порядок не имеет значения.
Что касается включений, вы должны включить файл ДО того, как вы пытаетесь использовать объявленную функцию / класс внутри этого файла.
Просто включите их, прежде чем они будут нужны, и все будет хорошо.
Было бы важно, чтобы один класс пытался использовать другой, который еще не был разобран, тогда возникла бы ошибка. Лучший вариант – разместить классы в скрипте, чтобы зависимость все еще оставалась неповрежденной.
Если все они находятся в одном файле, порядок не должен иметь значения. Есть некоторые редкие случаи (я видел с пространствами имен), где порядок имеет значение, но не беспокойтесь об этом слишком сильно, если вы не нажимаете конверт.
Попробуй. Самое худшее, что может случиться, это то, что он даст вам ошибку …
Да, это имеет значение, и когда задействовано большое количество классов, это может вызвать проблемы. Использование автозагрузки нецелесообразно, когда ваши сценарии производства должны включать 40 или 50 классов, что всегда происходит, если ваше приложение правильно спроектировано в соответствии с наилучшими методами ООП, и вам нужно иметь дело с формами и т. Д. …
Позвольте мне объяснить, почему этот порядок имеет значение. Если вы используете автозагрузчик, каждый раз, когда ключевое слово extends найдено, происходит попытка автозагрузки класса. Поэтому, если вы расширились до того, как был определен класс, который был расширен, он инициирует событие автозагрузки.
При разработке приложения используйте пользовательский автозагрузчик. Сделайте этот пользовательский автозагрузчик предоставлением информации о времени и используемой памяти. Он будет загружать все файлы классов один за другим и тратить много времени на это. Когда ваше приложение будет завершено, вы можете оптимизировать, сосредоточив много связанных классов в одном файле. Например, мой класс формы находится в class.form.php, и он не просто загружает класс формы. Он загружает еще 50 классов, связанных с формами. Таким образом, у меня есть все в одном файле, и когда я создаю новую форму (), автозагрузчик загружает класс.form.php, который включает в себя другие классы, которые обычно нужны форме (form_checkbox, form_input и т. Д.), Поэтому, когда они необходимы, они не являются автозагрузчиками, поскольку они уже определены.
Вы можете создать PHP-скрипт, который будет рекурсифицировать, разрешить зависимости и упорядочить все ваши классы в файле одного класса (class.form.php, используя мой пример), чтобы все они имели родительский класс, определенный перед ключевым словом extends (который запускает автозагрузку) найден. Я запускаю php -w в конкатенированном файле, который разбивает комментарии и пробелы. Он уменьшил мои классы форм с 80 до 18K. Всякий раз, когда я использую форму, я создаю новую форму (), и она загружает классы, связанные с формой, на 18 КБ, что не является чрезмерным.
Вначале я использовал командную команду linux, но она не работает. Вам нужен более умный скрипт, который может разрешить родителям каждого расширенного класса и правильно упорядочить классы в файле, который содержит много связанных классов.