Зачем беспокоиться об автозагрузке в WordPress, часть 1
Одна из самых простых вещей, которые мы можем сделать при работе с плагинами WordPress, — это удалить операторы require_once или include_once по всему коду.
И почему бы нет? Это простой способ ввести все необходимые файлы или зависимости для данного класса, сделать их легко читаемыми и не беспокоиться о создании огромных файлов кода. То есть это помогает нам упростить то, что мы пишем, чтобы мы могли заставить наши классы [в основном или в идеале] делать то, что они делают хорошо.
Если вы читали этот сайт в прошлом году или около того, вы знаете, что я поклонник автозагрузки, и я думаю, что любой, кто работает с PHP, независимо от того, используете ли вы WordPress или другую платформу, должен использовать.
Но возникает два вопроса, особенно если вы только начинаете:
- Зачем возиться с автозагрузкой, когда есть другие способы обработки зависимостей загрузки?
- Как автозагрузка сочетается с скомпилированными языками?
Поэтому я подумал, что стоит ответить на этот вопрос в следующих двух постах.
Зачем заморачиваться с автозагрузкой?
Вкратце это так:
- require_once и include_once могут привести к сложному для отладки коду,
- сложно отследить код.
Но как так?
1 Отладка — это сложно
При написании кода, если что-то и можно сказать наверняка, так это то, что что-то будет работать не так, как задумано. Это в природе того, что мы делаем, верно?
Поэтому, когда дело доходит до отладки кода, у всех нас есть свои стратегии.
- некоторые из нас предпочитают использовать echo или var_dump для трассировки кода,
- использовать плагин в WordPress,
- другие используют отладчик.
Хотя этот пост не о том, как отлаживать, это тот факт, что мы должны отлаживать. Так что, если мы знаем, что нам придется это сделать, не должны ли мы максимально облегчить себе задачу?
PHP — это язык с динамической типизацией, поэтому в целом есть много вещей, о которых мы заботимся каждый раз, когда пишем код. То есть определенные вещи выводятся или принудительно выполняются всякий раз, когда код запускается.
Например, предположим, что вы работаете со строкой и сравниваете ее с числом. Интерпретатор сделает все возможное, чтобы угадать, что вы делаете (вы хотите разобрать строку на целое число или наоборот?), а затем работать с этим.
Работа только с переменными может быть упражнением в точности, потому что мы хотим, чтобы наш код читался так, как мы задумали. Зачем оставлять переводчику возможность догадываться, что мы имеем в виду? И если интерпретатору приходится выполнять дополнительную работу, то это, безусловно, делают люди.
С этой целью, если мы знаем, что будут появляться ошибки, и мы знаем, что есть способы написать более чистый код, почему бы нам не сделать это?
2 Трассировка — это сложно (или, может быть, еще сложнее?)
Но это по-прежнему не объясняет, почему мы должны полагаться на что-то вроде автозагрузчика, а не на встроенные средства языка, не так ли?
Подумайте об этом: скажем, вы просматриваете файл, пытаясь найти ошибку, и вы сталкиваетесь с функцией, которая имеет некоторый код, использует include_once, а затем использует какой-то другой код.
Это означает, что вы должны прочитать код, сохранить его в памяти, прыгнуть в другой файл, понять этот код, а затем вернуться к исходному файлу. И это предполагает, что второй файл не включает и не требует других файлов.
Не зря это называется спагетти-кодом.
С учетом сказанного вы можете увидеть затруднительное положение, которое возникает, когда вы решите вложить этот код в остальную часть своей программы. Короче говоря, вы вложили включение зависимостей, что по своей сути затрудняет отслеживание того, где что-то может пойти не так.
Это не означает, что автозагрузка автоматически исправляет это, но это означает, что так быть не должно. Вместо этого вы можете написать код, который создает экземпляры классов, вызывает методы, а затем выполняет код без необходимости включать что-либо вручную.
Более читаемый и отслеживаемый код
При этом я обнаружил, что это заставляет нас писать более чистый код, возможно, более удобный для сопровождения. Это также упрощает написание кода, который мы можем легче отслеживать, и который легче использовать с помощью отладчика.
То есть мы можем установить точки останова в определенных местах нашего кода, чтобы отладчик автоматически переводил нас в вызываемый класс и возвращался обратно в функцию, которая его вызывала.
Это не означает, что нельзя сделать по-другому, но преимущества намного перевешивают альтернативы. И, конечно, при этом остается вопрос, зачем вообще нужна автозагрузка (или любое включение сторонних файлов).
Но об этом будет рассказано во второй части серии.
Другое Чтение
Мой пост о пространствах имен и автозагрузке в WordPress, а также о простом автозагрузчике для WordPress — это два других ресурса, которые я, очевидно, нахожу связанными с этим конкретным постом. Так что, если у вас есть время, проверьте их (и не стесняйтесь открыть вопрос или запрос на включение в простой проект автозагрузчика).
