Identify the Data Source with the Symfony Finder Component.
![]() | |
Now, and for the following chapters, we will not mention how you load the classes. Depending of the install strategy you’ve adopted, Composer or other, don’t forget to load your autoloader. |
CompatInfo uses the Reflect data source provider mechanism. You may either use the basic Symfony Finder, what we will do next, or use your own.
![]() | |
The |
<?php use Bartlett\Reflect\Provider\SymfonyFinderProvider; use Symfony\Component\Finder\Finder; $dirs = dirname(__DIR__) . '/sources'; $finder = new Finder(); $finder->files() ->name('*.php') ->in($dirs); $provider = new SymfonyFinderProvider($finder);
At this step, we have created a data source provider that is allowed to retrieve each element to parse.
CompatInfo need to know it. We attach then the previous provider instance
to a Provider Manager, with a label ( e.g: Single
) to identify it easily.
Reflect Provider Manager with a unique data source.
<?php use Bartlett\Reflect\ProviderManager; $pm = new ProviderManager; $pm->set('Single', $provider);
![]() | |
A Provider Manager may provide one or more data source identifications.
Equivalent to the |
Reflect Provider Manager with multiple data sources.
<?php use Bartlett\Reflect\ProviderManager; use Bartlett\Reflect\Provider\SymfonyFinderProvider; use Symfony\Component\Finder\Finder; $pm = new ProviderManager; // -- source 1 $source1 = dirname(__DIR__) . '/sources/'; $finder1 = new Finder(); $finder1->files() ->name('sample1.php') ->in($source1); $pm->set('Sample', new SymfonyFinderProvider($finder1)); // -- source 2 $pharFile = dirname(__DIR__) . '/sources/pirus.phar'; $source2 = 'phar://' . $pharFile; $finder2 = new Finder(); $finder2->files() ->path('/Pirus/') ->name('*.php') ->in($source2); $pm->set('Pirus', new SymfonyFinderProvider($finder2));
On this example CompatInfo is able to parse contents
of two data sources: Sample
and Pirus
, all at once (default behavior) or individually.
We reuse the provider manager instance ($pm
) seen above (unique data source named Single
).
Then we ask CompatInfo to parse its full contents.
<?php use Bartlett\CompatInfo; $compatinfo = new CompatInfo; $compatinfo->setProviderManager($pm); $compatinfo->parse();
In case of multiple data sources, when you want to parse it individually rather than fully, use the following statements.
Parse only Data Source named Pirus
.
<?php use Bartlett\CompatInfo; $compatinfo = new CompatInfo; $compatinfo->setProviderManager($pm); $compatinfo->parse(array('Pirus'));
Pirus
is the data source label used on $pm→set()
statement.
You have identified data sources and parsed its full contents. Now you are ready to handle the results.
To explore and exploit results, we need first to parse the data source, and connect at least one analyser.
On following example, we will use the standard SummaryAnalyser
, but you are free
to use any other analysers available and even your owns.
![]() | |
Each analyser, should at least, implement the |
<?php require_once 'vendor/autoload.php'; use Bartlett\CompatInfo; use Bartlett\CompatInfo\Analyser; use Bartlett\Reflect\ProviderManager; use Bartlett\Reflect\Provider\SymfonyFinderProvider; use Bartlett\Reflect\Plugin\Analyser\AnalyserPlugin; use Symfony\Component\Finder\Finder; $dirs = '/path/to/source'; $finder = new Finder(); $finder->files() ->name('*.php') ->in($dirs); $provider = new SymfonyFinderProvider($finder); $sourceId = 'dataSourceIdent'; $pm = new ProviderManager; $pm->set($sourceId, $provider); $compatinfo = new CompatInfo; $compatinfo->setProviderManager($pm); $compatinfo->addPlugin( new AnalyserPlugin( array( new Analyser\SummaryAnalyser(), ) ) ); $compatinfo->parse(); $metrics = $compatinfo->getMetrics(); $versions = $metrics[$sourceId]['sa.versions']; $classes = $metrics[$sourceId]['sa.classes']; $functions = $metrics[$sourceId]['sa.functions']; $extensions = $metrics[$sourceId]['sa.extensions'];
![]() | |
|