/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Varien
* @package Varien_Autoload
* @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Classes source autoload
*/
class Varien_Autoload
{
const SCOPE_FILE_PREFIX = '__';
static protected $_instance;
static protected $_scope = 'default';
protected $_isIncludePathDefined= null;
protected $_collectClasses = false;
protected $_collectPath = null;
protected $_arrLoadedClasses = array();
/**
* Class constructor
*/
public function __construct()
{
$this->_isIncludePathDefined = defined('COMPILER_INCLUDE_PATH');
if (defined('COMPILER_COLLECT_PATH')) {
$this->_collectClasses = true;
$this->_collectPath = COMPILER_COLLECT_PATH;
}
self::registerScope(self::$_scope);
}
/**
* Singleton pattern implementation
*
* @return Varien_Autoload
*/
static public function instance()
{
if (!self::$_instance) {
self::$_instance = new Varien_Autoload();
}
return self::$_instance;
}
/**
* Register SPL autoload function
*/
static public function register()
{
spl_autoload_register(array(self::instance(), 'autoload'));
}
/**
* Load class source code
*
* @param string $class
*/
public function autoload($class)
{
if ($this->_collectClasses) {
$this->_arrLoadedClasses[self::$_scope][] = $class;
}
if ($this->_isIncludePathDefined) {
$classFile = $class;
} else {
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
}
$classFile.= '.php';
//echo $classFile;die();
return include $classFile;
}
/**
* Register autoload scope
* This process allow include scope file which can contain classes
* definition which are used for this scope
*
* @param string $code scope code
*/
static public function registerScope($code)
{
self::$_scope = $code;
@include self::SCOPE_FILE_PREFIX.$code.'.php';
}
/**
* Get current autoload scope
*
* @return string
*/
static public function getScope()
{
return self::$_scope;
}
/**
* Class destructor
*/
public function __destruct()
{
if ($this->_collectClasses) {
$this->_saveCollectedStat();
}
}
/**
* Save information about used classes per scope with class popularity
* Class_Name:popularity
*
* @return Varien_Autoload
*/
protected function _saveCollectedStat()
{
if (!is_dir($this->_collectPath)) {
@mkdir($this->_collectPath);
@chmod($this->_collectPath, 0777);
}
if (!is_writeable($this->_collectPath)) {
return $this;
}
foreach ($this->_arrLoadedClasses as $scope => $classes) {
$file = $this->_collectPath.DIRECTORY_SEPARATOR.$scope.'.csv';
$data = array();
if (file_exists($file)) {
$data = explode("\n", file_get_contents($file));
foreach ($data as $index => $class) {
$class = explode(':', $class);
$searchIndex = array_search($class[0], $classes);
if ($searchIndex !== false) {
$class[1]+=1;
unset($classes[$searchIndex]);
}
$data[$index] = $class[0].':'.$class[1];
}
}
foreach ($classes as $class) {
$data[] = $class . ':1';
}
file_put_contents($file, implode("\n", $data));
}
return $this;
}
}
Varien_Autoload.php source
最新推荐文章于 2024-05-30 01:58:48 发布