2021-01-08 11:55:00 +01:00

49 lines
1.3 KiB
PHP

<?php
namespace Drupal\xautoload\CacheMissObserver;
use Drupal\xautoload\ClassLoader\AbstractClassLoaderDecorator;
/**
* Replaces the ProxyClassFinder in the ClassLoader with the real ClassLoader.
*
* xautoload has a number of cached class loaders, working with APC cache or
* other key-value stores.
*
* The cached class loaders use the decorator pattern, and decorate a
* ClassFinder object, that will only be consulted on a cache miss.
*
* xautoload will first give the ClassLoader a ProxyClassFinder that wraps the
* real class loader. On the first cache miss, this ProxyClassFinder will
* notify all subscribed CacheMissObserverInterface object.
*
* The job of this particular observer is to replace the ProxyClassFinder, once
* it has done its job. Instead, the ClassLoader will get a reference ot the
* real ClassLoader, saving the overhead of going through ProxyClassFinder each
* time.
*
* @see ProxyClassFinder
*/
class CacheMissLoaderSetFinder implements CacheMissObserverInterface {
/**
* @var AbstractClassLoaderDecorator
*/
protected $loader;
/**
* @param AbstractClassLoaderDecorator $loader
*/
function __construct($loader) {
$this->loader = $loader;
}
/**
* {@inheritdoc}
*/
function cacheMiss($finder) {
$this->loader->setFinder($finder);
}
}