Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/Form/Primitives/PrimitiveClass.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public function of($class)
Assert::isTrue(
class_exists($className, true)
|| interface_exists($className, true),
"knows nothing about '{$className}' class"
"knows nothing about '{$className}' class/interface"
);

$this->ofClassName = $className;
Expand Down
22 changes: 22 additions & 0 deletions doc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
2012-24-10 Alexey S. Denisov
* global.inc.php.tpl
main/Autoloader/Autoloader.class.php
main/Autoloader/AutoloaderClassNotFound.class.php
main/Autoloader/AutoloaderClassPathCache.class.php
main/Autoloader/AutoloaderNoCache.class.php
main/Autoloader/AutoloaderPool.class.php
main/Autoloader/AutoloaderRecachable.class.php
main/Autoloader/AutoloaderWithNamespace.class.php
main/Autoloader/NamespaceDirScaner.class.php
main/Autoloader/NamespaceDirScanerOnPHP.class.php
main/Autoloader/NamespaceDirScanerPSR0.class.php
main/Autoloader/NamespaceResolver.class.php
main/Autoloader/NamespaceResolverOnPHP.class.php
main/Autoloader/NamespaceResolverPSR0.class.php
main/Autoloader/require.inc.php
meta/bin/build.php
meta/classes/MetaConfiguration.class.php
misc/Autoloader.inc.php
misc/BaseException.inc.php:
New Autoloader which work without include_paths and use optional namespaces

2012-09-29 Alexey S. Denisov

* core/DB/DB.class.php
Expand Down
194 changes: 91 additions & 103 deletions global.inc.php.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,6 @@
throw new BaseException($string, $code);
}

/* void */ function __autoload_failed($classname, $message)
{
eval(
'if (!class_exists("ClassNotFoundException", false)) { '
.'final class ClassNotFoundException extends BaseException {/*_*/} }'
.'throw new ClassNotFoundException("'.$classname.': '.$message.'");'
);
}

// file extensions
define('EXT_CLASS', '.class.php');
define('EXT_TPL', '.tpl.html');
Expand All @@ -40,20 +31,6 @@
sys_get_temp_dir().DIRECTORY_SEPARATOR.'onPHP'.DIRECTORY_SEPARATOR
);

if (!defined('ONPHP_CLASS_CACHE'))
define('ONPHP_CLASS_CACHE', ONPHP_TEMP_PATH);

// classes autoload magic
if (!defined('ONPHP_CLASS_CACHE_TYPE'))
define('ONPHP_CLASS_CACHE_TYPE', 'classPathCache');

require
dirname(__FILE__).DIRECTORY_SEPARATOR
.'misc'.DIRECTORY_SEPARATOR
.'Autoloader'.EXT_MOD;

spl_autoload_register(array('Autoloader', ONPHP_CLASS_CACHE_TYPE), false);

// system settings
error_reporting(E_ALL | E_STRICT);
set_error_handler('error2Exception', E_ALL | E_STRICT);
Expand Down Expand Up @@ -89,114 +66,125 @@
ONPHP_ROOT_PATH.'incubator'.DIRECTORY_SEPARATOR
);

set_include_path(
// current path
get_include_path().PATH_SEPARATOR

if (!defined('ONPHP_CLASS_CACHE'))
define('ONPHP_CLASS_CACHE', ONPHP_TEMP_PATH);

// classes autoload magic
if (!defined('ONPHP_CLASS_CACHE_TYPE'))
define('ONPHP_CLASS_CACHE_TYPE', 'AutoloaderClassPathCache');

require ONPHP_MAIN_PATH.'Autoloader'.DIRECTORY_SEPARATOR.'require'.EXT_MOD;

$autoloader = ONPHP_CLASS_CACHE_TYPE;
AutoloaderPool::set('onPHP', $autoloader = new $autoloader());
/* @var $autoloader AutoloaderClassPathCache */
$autoloader->setNamespaceResolver(NamespaceResolverOnPHP::create())->register();

$autoloader->addPaths(array(
// core classes
.ONPHP_CORE_PATH.'Base' .PATH_SEPARATOR
.ONPHP_CORE_PATH.'Cache' .PATH_SEPARATOR
ONPHP_CORE_PATH.'Base' ,
ONPHP_CORE_PATH.'Cache' ,

.ONPHP_CORE_PATH.'DB' .PATH_SEPARATOR
.ONPHP_CORE_PATH.'DB'.DIRECTORY_SEPARATOR.'Transaction'.PATH_SEPARATOR
.ONPHP_CORE_PATH.'DB'.DIRECTORY_SEPARATOR.'NoSQL'.PATH_SEPARATOR
ONPHP_CORE_PATH.'DB' ,
ONPHP_CORE_PATH.'DB'.DIRECTORY_SEPARATOR.'Transaction',
ONPHP_CORE_PATH.'DB'.DIRECTORY_SEPARATOR.'NoSQL',

.ONPHP_CORE_PATH.'Exceptions' .PATH_SEPARATOR
ONPHP_CORE_PATH.'Exceptions' ,

.ONPHP_CORE_PATH.'Form' .PATH_SEPARATOR
.ONPHP_CORE_PATH.'Form'.DIRECTORY_SEPARATOR.'Filters'.PATH_SEPARATOR
.ONPHP_CORE_PATH.'Form'.DIRECTORY_SEPARATOR.'Primitives'.PATH_SEPARATOR
ONPHP_CORE_PATH.'Form' ,
ONPHP_CORE_PATH.'Form'.DIRECTORY_SEPARATOR.'Filters',
ONPHP_CORE_PATH.'Form'.DIRECTORY_SEPARATOR.'Primitives',

.ONPHP_CORE_PATH.'Logic' .PATH_SEPARATOR
.ONPHP_CORE_PATH.'OSQL' .PATH_SEPARATOR
ONPHP_CORE_PATH.'Logic' ,
ONPHP_CORE_PATH.'OSQL' ,

// main framework
.ONPHP_MAIN_PATH.'Base' .PATH_SEPARATOR
ONPHP_MAIN_PATH.'Base' ,

.ONPHP_MAIN_PATH.'Criteria' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Criteria'.DIRECTORY_SEPARATOR.'Projections'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'Criteria' ,
ONPHP_MAIN_PATH.'Criteria'.DIRECTORY_SEPARATOR.'Projections',

.ONPHP_MAIN_PATH.'Crypto' .PATH_SEPARATOR
ONPHP_MAIN_PATH.'Crypto' ,

.ONPHP_MAIN_PATH.'DAOs' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'DAOs'.DIRECTORY_SEPARATOR.'Handlers'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'DAOs'.DIRECTORY_SEPARATOR.'Workers'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'DAOs'.DIRECTORY_SEPARATOR.'Uncachers'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'DAOs' ,
ONPHP_MAIN_PATH.'DAOs'.DIRECTORY_SEPARATOR.'Handlers',
ONPHP_MAIN_PATH.'DAOs'.DIRECTORY_SEPARATOR.'Workers',
ONPHP_MAIN_PATH.'DAOs'.DIRECTORY_SEPARATOR.'Uncachers',

.ONPHP_MAIN_PATH.'Flow' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'SPL' .PATH_SEPARATOR
ONPHP_MAIN_PATH.'Flow' ,
ONPHP_MAIN_PATH.'SPL' ,

.ONPHP_MAIN_PATH.'Net' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Http'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Mail'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Ip'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Soap'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'Net' ,
ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Http',
ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Mail',
ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Ip',
ONPHP_MAIN_PATH.'Net'.DIRECTORY_SEPARATOR.'Soap',

.ONPHP_MAIN_PATH.'Math' .PATH_SEPARATOR
ONPHP_MAIN_PATH.'Math' ,

.ONPHP_MAIN_PATH.'Markup' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Markup'.DIRECTORY_SEPARATOR.'Feed'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Markup'.DIRECTORY_SEPARATOR.'Html'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'Markup' ,
ONPHP_MAIN_PATH.'Markup'.DIRECTORY_SEPARATOR.'Feed',
ONPHP_MAIN_PATH.'Markup'.DIRECTORY_SEPARATOR.'Html',

.ONPHP_MAIN_PATH.'OQL' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'OQL'.DIRECTORY_SEPARATOR.'Expressions'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'OQL'.DIRECTORY_SEPARATOR.'Parsers'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'OQL'.DIRECTORY_SEPARATOR.'Statements'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'OQL' ,
ONPHP_MAIN_PATH.'OQL'.DIRECTORY_SEPARATOR.'Expressions',
ONPHP_MAIN_PATH.'OQL'.DIRECTORY_SEPARATOR.'Parsers',
ONPHP_MAIN_PATH.'OQL'.DIRECTORY_SEPARATOR.'Statements',

.ONPHP_MAIN_PATH.'OpenId' .PATH_SEPARATOR
ONPHP_MAIN_PATH.'OpenId' ,

.ONPHP_MAIN_PATH.'EntityProto'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'EntityProto'.DIRECTORY_SEPARATOR.'Builders'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'EntityProto'.DIRECTORY_SEPARATOR.'Accessors'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'EntityProto',
ONPHP_MAIN_PATH.'EntityProto'.DIRECTORY_SEPARATOR.'Builders',
ONPHP_MAIN_PATH.'EntityProto'.DIRECTORY_SEPARATOR.'Accessors',

.ONPHP_MAIN_PATH.'UnifiedContainer'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'UnifiedContainer',

.ONPHP_MAIN_PATH.'UI'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'UI'.DIRECTORY_SEPARATOR.'View'.PATH_SEPARATOR

.ONPHP_MAIN_PATH.'Utils' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'TuringTest'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Archivers'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'IO'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Logging'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Mobile'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'CommandLine'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Routers'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'UI',
ONPHP_MAIN_PATH.'UI'.DIRECTORY_SEPARATOR.'View',

ONPHP_MAIN_PATH.'Utils' ,
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'TuringTest',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Archivers',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'IO',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Logging',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Mobile',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'CommandLine',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'Routers',

.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'AMQP'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'AMQP'
.DIRECTORY_SEPARATOR.'Pecl'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'AMQP'
.DIRECTORY_SEPARATOR.'Exceptions'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'AMQP',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'AMQP'
.DIRECTORY_SEPARATOR.'Pecl',
ONPHP_MAIN_PATH.'Utils'.DIRECTORY_SEPARATOR.'AMQP'
.DIRECTORY_SEPARATOR.'Exceptions',

.ONPHP_MAIN_PATH.'Messages' .PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Messages'.DIRECTORY_SEPARATOR.'Interface'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'Messages' ,
ONPHP_MAIN_PATH.'Messages'.DIRECTORY_SEPARATOR.'Interface',

.ONPHP_MAIN_PATH.'Application' .PATH_SEPARATOR
ONPHP_MAIN_PATH.'Application' ,

.ONPHP_MAIN_PATH.'Charts'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Charts'.DIRECTORY_SEPARATOR.'Google'.PATH_SEPARATOR
.ONPHP_MAIN_PATH.'Monitoring'.PATH_SEPARATOR
ONPHP_MAIN_PATH.'Charts',
ONPHP_MAIN_PATH.'Charts'.DIRECTORY_SEPARATOR.'Google',
ONPHP_MAIN_PATH.'Monitoring',

.ONPHP_META_CLASSES.PATH_SEPARATOR
ONPHP_META_CLASSES,

/*
.ONPHP_INCUBATOR_PATH
.'classes'.DIRECTORY_SEPARATOR
.'Application'.DIRECTORY_SEPARATOR.PATH_SEPARATOR
ONPHP_INCUBATOR_PATH
.'classes'.DIRECTORY_SEPARATOR
.'Application'.DIRECTORY_SEPARATOR,

.ONPHP_INCUBATOR_PATH
.'classes'.DIRECTORY_SEPARATOR
.'Application'.DIRECTORY_SEPARATOR
.'Markups'.DIRECTORY_SEPARATOR.PATH_SEPARATOR

.ONPHP_INCUBATOR_PATH
.'classes'.DIRECTORY_SEPARATOR
.'Application'.DIRECTORY_SEPARATOR
.'Markups'.DIRECTORY_SEPARATOR
.'Documents'.DIRECTORY_SEPARATOR.PATH_SEPARATOR
ONPHP_INCUBATOR_PATH
.'classes'.DIRECTORY_SEPARATOR
.'Application'.DIRECTORY_SEPARATOR
.'Markups'.DIRECTORY_SEPARATOR,

ONPHP_INCUBATOR_PATH
.'classes'.DIRECTORY_SEPARATOR
.'Application'.DIRECTORY_SEPARATOR
.'Markups'.DIRECTORY_SEPARATOR
.'Documents'.DIRECTORY_SEPARATOR,
*/
);
));

//NOTE: disable by default
//see http://pgfoundry.org/docman/view.php/1000079/117/README.txt
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
<?php
/***************************************************************************
* Copyright (C) 2008-2009 by Konstantin V. Arkhipov *
* Copyright (C) 2012 by Aleksey S. Denisov *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of the *
* License, or (at your option) any later version. *
* *
***************************************************************************/

class BaseException extends Exception
interface Autoloader
{
public function __toString()
{
return
"[$this->message] in: \n".
$this->getTraceAsString();
}
public function autoload($className);

public function register();

public function unregister();
}
?>
64 changes: 64 additions & 0 deletions main/Autoloader/AutoloaderClassNotFound.class.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php
/***************************************************************************
* Copyright (C) 2012 by Aleksey S. Denisov *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of the *
* License, or (at your option) any later version. *
* *
***************************************************************************/

class AutoloaderClassNotFound implements Autoloader
{
private static $i = null;

protected function __construct() {
/* you must'n create it outside */
}

/**
* @return AutoloaderClassNotFound
*/
public static function me()
{
return self::$i
?: (self::$i = new self());
}

public function autoload($className)
{
static $checkMethods = array(
'class_exists',
'interface_exists',
'trait_exists',
);

AutoloaderPool::autoloadWithRecache($className);
if (class_exists($className, false))
return;

foreach (debug_backtrace() as $call) {
if (
!empty($call['function'])
&& empty($call['class'])
&& in_array($call['function'], $checkMethods)
)
return;
}

throw new ClassNotFoundException('"'.$className.'"');
}

public function register()
{
$this->unregister();
spl_autoload_register(array($this, 'autoload'));
}

public function unregister()
{
spl_autoload_unregister(array($this, 'autoload'));
}
}
?>
Loading