1. Go to this page and download the library: Download exteon/mapping-class-loader library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
exteon / mapping-class-loader example snippets
class A {
public function doSomething(string $what): void
{
// ...
}
}
use Exteon\Loader\MappingClassLoader\ClassResolver;
use Exteon\Loader\MappingClassLoader\Data\LoadAction;
class Resolver implements ClassResolver {
function resolveClass(string $class) : array{
$loadActions = [];
$sourceFile = $class . '.php';
$sourceCode = file_get_contents($sourceFile);
// Rename i.e. A to A_proxied
$proxiedClass = $class.'_proxied';
$modifiedCode = preg_replace(
'(/class\\s+)('.preg_quote($class,'/').')(\\s)/',
'$1'.$proxiedClass.'$3',
$sourceCode
);
$loadActions[] = new LoadAction(
$proxiedClass,
$sourceFile,
$modifiedCode
);
$proxyCode = '
class ' . $class . ' extends ' . $proxiedClass. '
{
// ... specific generated proxy code ...
}
';
$loadActions[] = new LoadAction(
$class,
null,
$proxyCode
);
}
}
use Exteon\Loader\MappingClassLoader\MappingClassLoader;
use Exteon\Loader\MappingClassLoader\StreamWrapLoader;
$loader = new MappingClassLoader(
[],
[new Resolver()],
null,
new StreamWrapLoader([])
);
$loader->register();
(new A())->doSomething('anything');
public function __construct(
string $class,
?string $file,
?string $source = null,
?string $hintCode = null
);
use Exteon\Loader\MappingClassLoader\MappingClassLoader;
use Exteon\Loader\MappingClassLoader\StreamWrapLoader;
$loader = new MappingClassLoader(
[
'enableCaching' => true,
'cacheDir' => '/tmp/caching'
],
[new Resolver()],
null,
new StreamWrapLoader([])
);
$loader->register();
use Exteon\Loader\MappingClassLoader\MappingClassLoader;
use Exteon\Loader\MappingClassLoader\StreamWrapLoader;
$loader = new MappingClassLoader(
[],
[new Resolver()],
null,
new StreamWrapLoader([
'enableMapping' => true
])
);
$loader->register();
use Exteon\Loader\MappingClassLoader\StaticInitializer\ClassInitMethodInitializable;
class A implements ClassInitMethodInitializable {
protected static $someClassStaticProperty;
public static function classInit() : void{
self::$someClassStaticProperty = 'I am initialized now';
}
function getStaticProperty(){
return self::$someClassStaticProperty;
}
}
use Exteon\Loader\MappingClassLoader\MappingClassLoader;
use Exteon\Loader\MappingClassLoader\StaticInitializer\ClassInitMethodInitializer;use Exteon\Loader\MappingClassLoader\StreamWrapLoader;
$loader = new MappingClassLoader(
[],
[new Resolver()],
new ClassInitMethodInitializer(),
new StreamWrapLoader([])
);
$loader->register();
var_dump((new A())->getStaticProperty());
class B extends A {
protected static $someOtherStaticProperty;
public static function classInit() : void{
self::$someClassStaticProperty = 'Other property is initialized';
}
}
MappingClassLoader::dumpHintClasses($dir);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.