Doctrine 1.2.4
Doctrine_Compiler Class Reference

Static Public Member Functions

static compile ($target=null, $includedDrivers=array())
 

Detailed Description

Definition at line 34 of file Compiler.php.

Member Function Documentation

static Doctrine_Compiler::compile (   $target = null,
  $includedDrivers = array() 
)
static

method for making a single file of most used doctrine runtime components including the compiled file instead of multiple files (in worst cases dozens of files) can improve performance by an order of magnitude

Exceptions
Doctrine_Compiler_Exceptionif something went wrong during the compile operation
Returns
$target Path the compiled file was written to

Definition at line 44 of file Compiler.php.

{
if ( ! is_array($includedDrivers)) {
$includedDrivers = array($includedDrivers);
}
$excludedDrivers = array();
// If we have an array of specified drivers then lets determine which drivers we should exclude
if ( ! empty($includedDrivers)) {
$drivers = array('db2',
'mssql',
'mysql',
'oracle',
'pgsql',
'sqlite');
$excludedDrivers = array_diff($drivers, $includedDrivers);
}
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path . '/Doctrine'), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($it as $file) {
$e = explode('.', $file->getFileName());
//@todo what is a versioning file? do we have these anymore? None
//exists in my version of doctrine from svn.
// we don't want to require versioning files
if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false
&& strpos($file->getFileName(), 'sfYaml') === false) {
require_once $file->getPathName();
}
}
$classes = array_merge(get_declared_classes(), get_declared_interfaces());
$ret = array();
foreach ($classes as $class) {
$e = explode('_', $class);
if ($e[0] !== 'Doctrine') {
continue;
}
// Exclude drivers
if ( ! empty($excludedDrivers)) {
foreach ($excludedDrivers as $excludedDriver) {
$excludedDriver = ucfirst($excludedDriver);
if (in_array($excludedDriver, $e)) {
continue(2);
}
}
}
$refl = new ReflectionClass($class);
$file = $refl->getFileName();
$lines = file($file);
$start = $refl->getStartLine() - 1;
$end = $refl->getEndLine();
$ret = array_merge($ret, array_slice($lines, $start, ($end - $start)));
}
if ($target == null) {
$target = $path . DIRECTORY_SEPARATOR . 'Doctrine.compiled.php';
}
// first write the 'compiled' data to a text file, so
// that we can use php_strip_whitespace (which only works on files)
$fp = @fopen($target, 'w');
if ($fp === false) {
throw new Doctrine_Compiler_Exception("Couldn't write compiled data. Failed to open $target");
}
fwrite($fp, "<?php ". implode('', $ret));
fclose($fp);
$stripped = php_strip_whitespace($target);
$fp = @fopen($target, 'w');
if ($fp === false) {
throw new Doctrine_Compiler_Exception("Couldn't write compiled data. Failed to open $file");
}
fwrite($fp, $stripped);
fclose($fp);
return $target;
}

The documentation for this class was generated from the following file: