Пример #1
0
/**
 * @param Symfony\Component\DependencyInjection\ContainerBuilder $container
 */
function api4_civicrm_container($container)
{
    $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__));
    $container->setDefinition('action_object_provider', new \Symfony\Component\DependencyInjection\Definition('Civi\\API\\Provider\\ActionObjectProvider', array()));
    $container->findDefinition('dispatcher')->addMethodCall('addSubscriber', array(new \Symfony\Component\DependencyInjection\Reference('action_object_provider')));
    $container->findDefinition('civi_api_kernel')->addMethodCall('registerApiProvider', array(new \Symfony\Component\DependencyInjection\Reference('action_object_provider')));
}
<?php

$file = __DIR__ . '/container_test5.php';
if (file_exists($file)) {
    require_once $file;
    $container = new ProjectServiceContainer();
} else {
    $container = new Symfony\Component\DependencyInjection\ContainerBuilder();
    $container->register('A', 'A');
    $ref = [new Symfony\Component\DependencyInjection\Reference('A')];
    $definition = new Symfony\Component\DependencyInjection\Definition('B', $ref);
    $definition->setScope('prototype');
    $container->setDefinition('B', $definition);
    $container->compile();
    $dumper = new Symfony\Component\DependencyInjection\Dumper\PhpDumper($container);
    file_put_contents($file, $dumper->dump());
}
//trigger autoloader
$a = $container->get('B');
unset($a);
$t1 = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    $a = $container->get('B');
}
$t2 = microtime(true);
$results = ['time' => $t2 - $t1, 'files' => count(get_included_files()), 'memory' => memory_get_peak_usage() / 1024 / 1024];
echo json_encode($results);
$file = __DIR__ . '/container_test6.php';
if (file_exists($file)) {
    require_once $file;
    $container = new ProjectServiceContainer();
} else {
    $container = new Symfony\Component\DependencyInjection\ContainerBuilder();
    $classes = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'];
    for ($i = 0; $i < count($classes); $i++) {
        if (isset($classes[$i - 1])) {
            $ref = [new Symfony\Component\DependencyInjection\Reference($classes[$i - 1])];
        } else {
            $ref = [];
        }
        $definition = new Symfony\Component\DependencyInjection\Definition($classes[$i], $ref);
        $definition->setScope('prototype');
        $container->setDefinition($classes[$i], $definition);
    }
    $container->compile();
    $dumper = new Symfony\Component\DependencyInjection\Dumper\PhpDumper($container);
    file_put_contents($file, $dumper->dump());
}
//Trigger autoloader
$a = $container->get('J');
unset($a);
$t1 = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    $a = $container->get('J');
}
$t2 = microtime(true);
$results = ['time' => $t2 - $t1, 'files' => count(get_included_files()), 'memory' => memory_get_peak_usage() / 1024 / 1024];
echo json_encode($results);