Я часто слышу эти два термина и продолжаю думать
В чем разница между временем компиляции и временем выполнения в PHP?
Я пробовал читать некоторые статьи, но это не помогло.
Кто-нибудь знает о простом объяснении? Чем они отличаются друг от друга?
PHP делает два прохода (по умолчанию) в любое время, когда он запускает файл.
Пасс №1 анализирует файл и строит то, что называется операционным (или машинным) кодом. Это необработанный двоичный формат, который ваш компьютер будет запускать, и он не читается человеком. На других языках (например, на C ++ и т. Д.) Это называется компиляцией. Вы можете кэшировать этот шаг с помощью различных систем, таких как Opcache , что экономит ваши затраты на сбор данных каждый раз.
Синтаксические ошибки исходят из этой части выполнения.
Передача № 2 выполняет рабочий код из Паса №1. Это то, что обычно называют «временем выполнения», потому что ваш компьютер фактически выполняет инструкции.
Исходные ошибки (например, исчерпывающая память, ненормальное завершение и т. Д.) Исходят из этого уровня. Однако они значительно реже, чем синтаксические ошибки.
Файлы PHP выполняются в два этапа.
Сначала обрабатываются файлы PHP. На данный момент данные, поступающие из веб-браузера (или из любого другого источника), совершенно неактуальны. Все это делает разрыв файла PHP в его составные части и построение структуры кода.
Затем код выполняется с данными, которые вы поставляете.
Это разделение делает код намного быстрее. Это особенно актуально, если у вас есть кэши кода операций, такие как APC или OPcache, потому что первый шаг можно пропустить в следующих случаях, потому что структура кода точно такая же.
Время, когда вы столкнетесь с разницей, в основном связано с ошибками. Например, этот код вызовет ошибку на этапе компиляции:
function class() { // some code }
Это невозможно, потому что class
является зарезервированным словом. PHP может выбрать это во время компиляции кода: он всегда будет терпеть неудачу. Он никогда не сможет работать.
Однако этот код может вызвать ошибку во время выполнения:
echo $_GET['nonExistingKey'];
Поскольку ключ nonExistingKey
не существует, его невозможно извлечь, поэтому он вызывает ошибку. Однако PHP не может решить это, когда код изначально компилируется, только когда он запускается с данными, которые вы поставляете.