diff --git a/core/composer.json b/core/composer.json
index eb54ebfa81..f189f38849 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -180,7 +180,8 @@
             "lib/Drupal/Core/DrupalKernel.php",
             "lib/Drupal/Core/DrupalKernelInterface.php",
             "lib/Drupal/Core/Site/Settings.php"
-        ]
+        ],
+        "files": ["lib/autoloader.php"]
     },
     "config": {
         "preferred-install": "dist",
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index f65c3d1f06..e69972b343 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -12,6 +12,7 @@
 use Drupal\Core\Config\BootstrapConfigStorageFactory;
 use Drupal\Core\Logger\RfcLogLevel;
 use Drupal\Core\Test\TestDatabase;
+use Drupal\Core\Requirements;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Utility\Error;
@@ -28,12 +29,13 @@
  * - If a site managed to bypass all of the above, then an error is shown in
  *   the status report and various fatal errors occur on various pages.
  *
- * @see install.php
+ * @deprecated in drupal:8.8.0 and will be removed from drupal:9.0.0. Use
+ *   \Drupal\Core\Requirements::MINIMUM_PHP instead.
  *
- * @todo Move this to an appropriate autoloadable class. See
- *   https://www.drupal.org/project/drupal/issues/2908079
+ * @see https://www.drupal.org/node/2909361
+ * @see install.php
  */
-const DRUPAL_MINIMUM_PHP = '7.0.8';
+const DRUPAL_MINIMUM_PHP = Requirements::MINIMUM_PHP;
 
 /**
  * Minimum supported version of PHP.
@@ -44,10 +46,12 @@
  *   that Drupal no longer supports that PHP version.
  * - An error is shown in the status report that the PHP version is too old.
  *
- * @todo Move this to an appropriate autoloadable class. See
- *   https://www.drupal.org/project/drupal/issues/2908079
+ * @deprecated in drupal:8.8.0 and will be removed from drupal:9.0.0. Use
+ *   \Drupal\Core\Requirements::MINIMUM_SUPPORTED_PHP instead.
+ *
+ * @see https://www.drupal.org/node/2909361
  */
-const DRUPAL_MINIMUM_SUPPORTED_PHP = '7.0.8';
+const DRUPAL_MINIMUM_SUPPORTED_PHP = Requirements::MINIMUM_SUPPORTED_PHP;
 
 /**
  * Minimum recommended version of PHP.
@@ -56,10 +60,12 @@
  * message, but Drupal can still be installed. Used for (e.g.) PHP versions
  * that have reached their EOL or will in the near future.
  *
- * @todo Move this to an appropriate autoloadable class. See
- *   https://www.drupal.org/project/drupal/issues/2908079
+ * @deprecated in drupal:8.8.0 and will be removed from drupal:9.0.0. Use
+ *   \Drupal\Core\Requirements::RECOMMENDED_PHP instead.
+ *
+ * @see https://www.drupal.org/node/2909361
  */
-const DRUPAL_RECOMMENDED_PHP = '7.2';
+const DRUPAL_RECOMMENDED_PHP = Requirements::RECOMMENDED_PHP;
 
 /**
  * Minimum recommended value of PHP memory_limit.
@@ -68,10 +74,12 @@
  * contributed modules to be installed prior to hitting the limit. However,
  * 40M is the target for the Standard installation profile.
  *
- * @todo Move this to an appropriate autoloadable class. See
- *   https://www.drupal.org/project/drupal/issues/2908079
+ * @deprecated in drupal:8.8.0 and will be removed from drupal:9.0.0. Use
+ *   \Drupal\Core\Requirements::MINIMUM_PHP_MEMORY_LIMIT instead.
+ *
+ * @see https://www.drupal.org/node/2909361
  */
-const DRUPAL_MINIMUM_PHP_MEMORY_LIMIT = '64M';
+const DRUPAL_MINIMUM_PHP_MEMORY_LIMIT = Requirements::MINIMUM_PHP_MEMORY_LIMIT;
 
 /**
  * Error reporting level: display no errors.
diff --git a/core/includes/install.inc b/core/includes/install.inc
index 9922166cb6..30742417a1 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -12,6 +12,7 @@
 use Drupal\Core\Extension\Dependency;
 use Drupal\Core\Extension\ExtensionDiscovery;
 use Drupal\Core\File\FileSystemInterface;
+use Drupal\Core\Requirements;
 use Drupal\Core\Site\Settings;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 
@@ -1125,7 +1126,7 @@ function install_profile_info($profile, $langcode = 'en') {
       'description' => '',
       'version' => NULL,
       'hidden' => FALSE,
-      'php' => DRUPAL_MINIMUM_PHP,
+      'php' => Requirements::MINIMUM_PHP,
       'config_install_path' => NULL,
     ];
     $profile_path = drupal_get_path('profile', $profile);
diff --git a/core/install.php b/core/install.php
index 8cc3880c81..d87159dcdc 100644
--- a/core/install.php
+++ b/core/install.php
@@ -21,15 +21,6 @@
  */
 define('MAINTENANCE_MODE', 'install');
 
-// Exit early if running an incompatible PHP version to avoid fatal errors.
-// The minimum version is specified explicitly, as DRUPAL_MINIMUM_PHP is not
-// yet available. It is defined in bootstrap.inc, but it is not possible to
-// load that file yet as it would cause a fatal error on older versions of PHP.
-if (version_compare(PHP_VERSION, '7.0.8') < 0) {
-  print 'Your PHP installation is too old. Drupal requires at least PHP 7.0.8. See the <a href="https://www.drupal.org/requirements">system requirements</a> page for more information.';
-  exit;
-}
-
 // Initialize the autoloader.
 $class_loader = require_once $root_path . '/autoload.php';
 
diff --git a/core/lib/Drupal/Core/Extension/ModuleExtensionList.php b/core/lib/Drupal/Core/Extension/ModuleExtensionList.php
index c8f492bd4f..4d3660c1ca 100644
--- a/core/lib/Drupal/Core/Extension/ModuleExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ModuleExtensionList.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Requirements;
 use Drupal\Core\State\StateInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
@@ -28,7 +29,7 @@ class ModuleExtensionList extends ExtensionList {
     'description' => '',
     'package' => 'Other',
     'version' => NULL,
-    'php' => DRUPAL_MINIMUM_PHP,
+    'php' => Requirements::MINIMUM_PHP,
   ];
 
   /**
diff --git a/core/lib/Drupal/Core/Extension/ProfileExtensionList.php b/core/lib/Drupal/Core/Extension/ProfileExtensionList.php
index 7c415168d8..6c422042f3 100644
--- a/core/lib/Drupal/Core/Extension/ProfileExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ProfileExtensionList.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Core\Extension;
 
+use Drupal\Core\Requirements;
+
 /**
  * Provides a list of installation profiles.
  *
@@ -22,7 +24,7 @@ class ProfileExtensionList extends ExtensionList {
     'description' => '',
     'package' => 'Other',
     'version' => NULL,
-    'php' => DRUPAL_MINIMUM_PHP,
+    'php' => Requirements::MINIMUM_PHP,
   ];
 
   /**
diff --git a/core/lib/Drupal/Core/Extension/ThemeEngineExtensionList.php b/core/lib/Drupal/Core/Extension/ThemeEngineExtensionList.php
index c4d39ef600..12887f869b 100644
--- a/core/lib/Drupal/Core/Extension/ThemeEngineExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ThemeEngineExtensionList.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Core\Extension;
 
+use Drupal\Core\Requirements;
+
 /**
  * Provides a list of available theme engines.
  *
@@ -21,7 +23,7 @@ class ThemeEngineExtensionList extends ExtensionList {
     'description' => '',
     'package' => 'Other',
     'version' => NULL,
-    'php' => DRUPAL_MINIMUM_PHP,
+    'php' => Requirements::MINIMUM_PHP,
   ];
 
   /**
diff --git a/core/lib/Drupal/Core/Extension/ThemeExtensionList.php b/core/lib/Drupal/Core/Extension/ThemeExtensionList.php
index 07a2f3f8f6..8239fbad77 100644
--- a/core/lib/Drupal/Core/Extension/ThemeExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ThemeExtensionList.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Requirements;
 use Drupal\Core\State\StateInterface;
 
 /**
@@ -48,7 +49,7 @@ class ThemeExtensionList extends ExtensionList {
       'comment_user_verification',
     ],
     'screenshot' => 'screenshot.png',
-    'php' => DRUPAL_MINIMUM_PHP,
+    'php' => Requirements::MINIMUM_PHP,
     'libraries' => [],
     'libraries_extend' => [],
     'libraries_override' => [],
diff --git a/core/lib/Drupal/Core/Extension/module.api.php b/core/lib/Drupal/Core/Extension/module.api.php
index ad273888a0..002cf8ea1c 100644
--- a/core/lib/Drupal/Core/Extension/module.api.php
+++ b/core/lib/Drupal/Core/Extension/module.api.php
@@ -8,6 +8,7 @@
 use Drupal\Core\Database\Database;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Link;
+use Drupal\Core\Requirements;
 use Drupal\Core\Url;
 use Drupal\Core\Utility\UpdateException;
 
@@ -955,8 +956,8 @@ function hook_requirements($phase) {
     'title' => t('PHP'),
     'value' => ($phase == 'runtime') ? Link::fromTextAndUrl(phpversion(), Url::fromRoute('system.php'))->toString() : phpversion(),
   ];
-  if (version_compare(phpversion(), DRUPAL_MINIMUM_PHP) < 0) {
-    $requirements['php']['description'] = t('Your PHP installation is too old. Drupal requires at least PHP %version.', ['%version' => DRUPAL_MINIMUM_PHP]);
+  if (version_compare(phpversion(), Requirements::MINIMUM_PHP) < 0) {
+    $requirements['php']['description'] = t('Your PHP installation is too old. Drupal requires at least PHP %version.', ['%version' => Requirements::MINIMUM_PHP]);
     $requirements['php']['severity'] = REQUIREMENT_ERROR;
   }
 
diff --git a/core/lib/Drupal/Core/Requirements.php b/core/lib/Drupal/Core/Requirements.php
new file mode 100644
index 0000000000..ea9b0b483d
--- /dev/null
+++ b/core/lib/Drupal/Core/Requirements.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Drupal\Core;
+
+/**
+ * Defines PHP-related constants for use with Drupal.
+ */
+final class Requirements {
+
+  /**
+   * Minimum supported version of PHP.
+   */
+  const MINIMUM_PHP = '7.0.8';
+
+  /**
+   * Minimum recommended value of PHP memory_limit.
+   *
+   * 64M was chosen as a minimum requirement in order to allow for additional
+   * contributed modules to be installed prior to hitting the limit. However,
+   * 40M is the target for the Standard installation profile.
+   */
+  const MINIMUM_PHP_MEMORY_LIMIT = '64M';
+
+  /**
+   * Minimum recommended version of PHP.
+   *
+   * Sites installing Drupal on PHP versions lower than this will see a warning
+   * message, but Drupal can still be installed. Used for (e.g.) PHP versions
+   * that have reached their EOL or will in the near future.
+   */
+  const RECOMMENDED_PHP = '7.2';
+
+  /**
+   * Minimum supported version of PHP.
+   *
+   * Below this version:
+   * - New sites cannot be installed, except from within tests.
+   * - Updates from previous Drupal versions can be run, but users are warned
+   *   that Drupal no longer supports that PHP version.
+   * - An error is shown in the status report that the PHP version is too old.
+   */
+  const MINIMUM_SUPPORTED_PHP = '7.0.8';
+
+}
diff --git a/core/lib/autoloader.php b/core/lib/autoloader.php
new file mode 100644
index 0000000000..5eca614975
--- /dev/null
+++ b/core/lib/autoloader.php
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @file
+ * Contains on autoload include event related functionality.
+ */
+
+use Drupal\Core\Requirements;
+
+// Checking minimum PHP version to avoid fatal errors.
+if (version_compare(PHP_VERSION, Requirements::MINIMUM_PHP) < 0) {
+  print 'Your PHP installation is too old. Drupal requires at least PHP ' . Requirements::MINIMUM_PHP . '. See the <a href="https://www.drupal.org/requirements">system requirements</a> page for more information.';
+  exit;
+}
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 018d5d003e..c328cacc46 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -21,6 +21,7 @@
 use Drupal\Core\DrupalKernel;
 use Drupal\Core\Extension\Extension;
 use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\Requirements;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\StreamWrapper\PrivateStream;
 use Drupal\Core\StreamWrapper\PublicStream;
@@ -186,11 +187,11 @@ function system_requirements($phase) {
   }
 
   // Check if the PHP version is below what Drupal supports.
-  if (version_compare($phpversion, DRUPAL_MINIMUM_SUPPORTED_PHP) < 0) {
+  if (version_compare($phpversion, Requirements::MINIMUM_SUPPORTED_PHP) < 0) {
     $requirements['php']['description'] = t('Your PHP installation is too old. Drupal requires at least PHP %version. It is recommended to upgrade to PHP version %recommended or higher for the best ongoing support. See <a href="http://php.net/supported-versions.php">PHP\'s version support documentation</a> and the <a href=":php_requirements">Drupal 8 PHP requirements handbook page</a> for more information.',
       [
-        '%version' => DRUPAL_MINIMUM_SUPPORTED_PHP,
-        '%recommended' => DRUPAL_RECOMMENDED_PHP,
+        '%version' => Requirements::MINIMUM_SUPPORTED_PHP,
+        '%recommended' => Requirements::RECOMMENDED_PHP,
         ':php_requirements' => 'https://www.drupal.org/docs/8/system-requirements/php',
       ]
     );
@@ -198,7 +199,7 @@ function system_requirements($phase) {
 
     // If the PHP version is also below the absolute minimum allowed, it's not
     // safe to continue with the requirements check.
-    if (version_compare($phpversion, DRUPAL_MINIMUM_PHP) < 0) {
+    if (version_compare($phpversion, Requirements::MINIMUM_PHP) < 0) {
       return $requirements;
     }
     // Otherwise downgrade the error to a warning during updates. Even if there
@@ -219,8 +220,8 @@ function system_requirements($phase) {
   // For PHP versions that are still supported but no longer recommended,
   // inform users of what's recommended, allowing them to take action before it
   // becomes urgent.
-  elseif ($phase === 'runtime' && version_compare($phpversion, DRUPAL_RECOMMENDED_PHP) < 0) {
-    $requirements['php']['description'] = t('It is recommended to upgrade to PHP version %recommended or higher for the best ongoing support.  See <a href="http://php.net/supported-versions.php">PHP\'s version support documentation</a> and the <a href=":php_requirements">Drupal 8 PHP requirements handbook page</a> for more information.', ['%recommended' => DRUPAL_RECOMMENDED_PHP, ':php_requirements' => 'https://www.drupal.org/docs/8/system-requirements/php']);
+  elseif ($phase === 'runtime' && version_compare($phpversion, Requirements::RECOMMENDED_PHP) < 0) {
+    $requirements['php']['description'] = t('It is recommended to upgrade to PHP version %recommended or higher for the best ongoing support.  See <a href="http://php.net/supported-versions.php">PHP\'s version support documentation</a> and the <a href=":php_requirements">Drupal 8 PHP requirements handbook page</a> for more information.', ['%recommended' => Requirements::RECOMMENDED_PHP, ':php_requirements' => 'https://www.drupal.org/docs/8/system-requirements/php']);
     $requirements['php']['severity'] = REQUIREMENT_INFO;
   }
 
@@ -392,16 +393,16 @@ function system_requirements($phase) {
     'value' => $memory_limit == -1 ? t('-1 (Unlimited)') : $memory_limit,
   ];
 
-  if (!Environment::checkMemoryLimit(DRUPAL_MINIMUM_PHP_MEMORY_LIMIT, $memory_limit)) {
+  if (!Environment::checkMemoryLimit(Requirements::MINIMUM_PHP_MEMORY_LIMIT, $memory_limit)) {
     $description = [];
     if ($phase == 'install') {
-      $description['phase'] = t('Consider increasing your PHP memory limit to %memory_minimum_limit to help prevent errors in the installation process.', ['%memory_minimum_limit' => DRUPAL_MINIMUM_PHP_MEMORY_LIMIT]);
+      $description['phase'] = t('Consider increasing your PHP memory limit to %memory_minimum_limit to help prevent errors in the installation process.', ['%memory_minimum_limit' => Requirements::MINIMUM_PHP_MEMORY_LIMIT]);
     }
     elseif ($phase == 'update') {
-      $description['phase'] = t('Consider increasing your PHP memory limit to %memory_minimum_limit to help prevent errors in the update process.', ['%memory_minimum_limit' => DRUPAL_MINIMUM_PHP_MEMORY_LIMIT]);
+      $description['phase'] = t('Consider increasing your PHP memory limit to %memory_minimum_limit to help prevent errors in the update process.', ['%memory_minimum_limit' => Requirements::MINIMUM_PHP_MEMORY_LIMIT]);
     }
     elseif ($phase == 'runtime') {
-      $description['phase'] = t('Depending on your configuration, Drupal can run with a %memory_limit PHP memory limit. However, a %memory_minimum_limit PHP memory limit or above is recommended, especially if your site uses additional custom or contributed modules.', ['%memory_limit' => $memory_limit, '%memory_minimum_limit' => DRUPAL_MINIMUM_PHP_MEMORY_LIMIT]);
+      $description['phase'] = t('Depending on your configuration, Drupal can run with a %memory_limit PHP memory limit. However, a %memory_minimum_limit PHP memory limit or above is recommended, especially if your site uses additional custom or contributed modules.', ['%memory_limit' => $memory_limit, '%memory_minimum_limit' => Requirements::MINIMUM_PHP_MEMORY_LIMIT]);
     }
 
     if (!empty($description['phase'])) {
diff --git a/core/tests/Drupal/Tests/Core/Command/QuickStartTest.php b/core/tests/Drupal/Tests/Core/Command/QuickStartTest.php
index 830eb0d5ce..1cdf192a19 100644
--- a/core/tests/Drupal/Tests/Core/Command/QuickStartTest.php
+++ b/core/tests/Drupal/Tests/Core/Command/QuickStartTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\Core\Command;
 
+use Drupal\Core\Requirements;
 use Drupal\Core\Test\TestDatabase;
 use Drupal\Tests\BrowserTestBase;
 use GuzzleHttp\Client;
@@ -84,7 +85,7 @@ public function tearDown() {
    * Tests the quick-start command.
    */
   public function testQuickStartCommand() {
-    if (version_compare(phpversion(), DRUPAL_MINIMUM_SUPPORTED_PHP) < 0) {
+    if (version_compare(phpversion(), Requirements::MINIMUM_SUPPORTED_PHP) < 0) {
       $this->markTestSkipped();
     }
 
@@ -140,7 +141,7 @@ public function testQuickStartCommand() {
    * Tests that the installer throws a requirement error on older PHP versions.
    */
   public function testPhpRequirement() {
-    if (version_compare(phpversion(), DRUPAL_MINIMUM_SUPPORTED_PHP) >= 0) {
+    if (version_compare(phpversion(), Requirements::MINIMUM_SUPPORTED_PHP) >= 0) {
       $this->markTestSkipped();
     }
 
@@ -164,7 +165,7 @@ public function testPhpRequirement() {
     $error_output = $process->getErrorOutput();
     $this->assertContains('Your PHP installation is too old.', $error_output);
     $this->assertContains('Drupal requires at least PHP', $error_output);
-    $this->assertContains(DRUPAL_MINIMUM_SUPPORTED_PHP, $error_output);
+    $this->assertContains(Requirements::MINIMUM_SUPPORTED_PHP, $error_output);
 
     // Stop the web server.
     $process->stop();
@@ -174,7 +175,7 @@ public function testPhpRequirement() {
    * Tests the quick-start commands.
    */
   public function testQuickStartInstallAndServerCommands() {
-    if (version_compare(phpversion(), DRUPAL_MINIMUM_SUPPORTED_PHP) < 0) {
+    if (version_compare(phpversion(), Requirements::MINIMUM_SUPPORTED_PHP) < 0) {
       $this->markTestSkipped();
     }
 
diff --git a/core/tests/Drupal/Tests/Core/Extension/ThemeExtensionListTest.php b/core/tests/Drupal/Tests/Core/Extension/ThemeExtensionListTest.php
index 03f2af113f..b0826cc071 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ThemeExtensionListTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ThemeExtensionListTest.php
@@ -260,6 +260,3 @@ class TestThemeEngineExtensionList extends ThemeEngineExtensionList {
 
 }
 
-if (!defined('DRUPAL_MINIMUM_PHP')) {
-  define('DRUPAL_MINIMUM_PHP', '5.5.9');
-}
diff --git a/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php b/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php
index 99c6769477..184ecbd483 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php
@@ -145,7 +145,3 @@ protected function themeRegistryRebuild() {
   }
 
 }
-
-if (!defined('DRUPAL_MINIMUM_PHP')) {
-  define('DRUPAL_MINIMUM_PHP', '5.5.9');
-}
diff --git a/core/tests/Drupal/Tests/RequirementsPageTrait.php b/core/tests/Drupal/Tests/RequirementsPageTrait.php
index 44f9bb9dc2..4e9ddaac69 100644
--- a/core/tests/Drupal/Tests/RequirementsPageTrait.php
+++ b/core/tests/Drupal/Tests/RequirementsPageTrait.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests;
 
+use Drupal\Core\Requirements;
+
 /**
  * Provides helper methods for the requirements page.
  */
@@ -12,7 +14,7 @@ trait RequirementsPageTrait {
    */
   protected function updateRequirementsProblem() {
     // Assert a warning is shown on older test environments.
-    if (version_compare(phpversion(), DRUPAL_MINIMUM_SUPPORTED_PHP) < 0) {
+    if (version_compare(phpversion(), Requirements::MINIMUM_SUPPORTED_PHP) < 0) {
       $this->assertNoText('Errors found');
       $this->assertWarningSummaries(['PHP']);
       $this->clickLink('try again');
