class MissingClassDetectionClassLoader
Defines a classloader that detects missing classes.
This does not load classes. It allows calling code to explicitly check whether a class that was requested failed to be discovered by other class loaders.
It also works around a PHP limitation when it attempts to load a class that relies on a trait that does not exist. This is a common situation with Drupal plugins, which may be intended to be dormant unless certain other modules are installed.
@internal
Hierarchy
- class \Drupal\Component\Discovery\MissingClassDetectionClassLoader
Expanded class hierarchy of MissingClassDetectionClassLoader
See also
https://github.com/php/php-src/issues/17959
1 file declares its use of MissingClassDetectionClassLoader
- AttributeClassDiscovery.php in core/
lib/ Drupal/ Component/ Plugin/ Discovery/ AttributeClassDiscovery.php
File
-
core/
lib/ Drupal/ Component/ Discovery/ MissingClassDetectionClassLoader.php, line 22
Namespace
Drupal\Component\DiscoveryView source
final class MissingClassDetectionClassLoader {
/**
* An array of detected missing traits.
*/
protected array $missingTraits = [];
/**
* Flag indicating whether there was an attempt to load a missing class.
*/
protected bool $missingClass = FALSE;
/**
* Records missing classes and aliases missing traits.
*
* This method is registered as a class loader during attribute discovery and
* runs last. Any call to this method means that the requested class is
* missing. If that class is a trait, it is aliased to a stub trait to avoid
* an uncaught PHP fatal error.
*
* @param string $class
* The class name to load.
*/
public function loadClass(string $class) : void {
$this->missingClass = TRUE;
if (str_ends_with($class, 'Trait')) {
$this->missingTraits[] = $class;
class_alias(StubTrait::class, $class);
}
}
/**
* Returns whether there was an attempt to load a missing class.
*
* @return bool
* TRUE if there was an attempt to load a missing class, otherwise FALSE.
*/
public function hasMissingClass() : bool {
return $this->missingClass;
}
/**
* Returns all recorded missing traits since the last reset.
*
* @return string[]
* An array of traits recorded as missing.
*/
public function getMissingTraits() : array {
return $this->missingTraits;
}
/**
* Resets class variables.
*/
public function reset() : void {
$this->missingClass = FALSE;
$this->missingTraits = [];
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
MissingClassDetectionClassLoader::$missingClass | protected | property | Flag indicating whether there was an attempt to load a missing class. |
MissingClassDetectionClassLoader::$missingTraits | protected | property | An array of detected missing traits. |
MissingClassDetectionClassLoader::getMissingTraits | public | function | Returns all recorded missing traits since the last reset. |
MissingClassDetectionClassLoader::hasMissingClass | public | function | Returns whether there was an attempt to load a missing class. |
MissingClassDetectionClassLoader::loadClass | public | function | Records missing classes and aliases missing traits. |
MissingClassDetectionClassLoader::reset | public | function | Resets class variables. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.