<?php
/*
=============================================================================================================================================
| This file is part of a project released under the terms of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt). |
| |
| You should be given a copy of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt) within the same directory as the README.md; |
| if not, you can get a copy at http://Xyndravandria.ohost.de/XyndravandriaPHPLicense.txt . |
| |
| The copyright (c) of this project is owned by Mauro Di Girolamo <maurodigirolamo@.web.de>. |
============================================================================================================================================|
Xyndravandria Dyverath
----------------------
Alpha 0.0.0
Xyndravandria is the name of a collection of projects designed and developed by Mauro Di Girolamo (maurodigirolamo@web.de); he is therefore the copyright (c) owner of Xyndravandria itself and all of its projects.
Xyndravandria Dyverath is released under the terms of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt). You should be given a copy of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt) within the same directory as the README.md; if not, you can get a copy at http://Xyndravandria.ohost.de/XyndravandriaPHPLicense.txt . There might be a release under a freer license for a later, more stable version.
The documentation is either included in ./admin_media/Documentation/ or can be read at http://Xyndravandria.ohost.de/Dyverath/Documentation/.
All projects:
Xyndravandria Averazain
http://github.com/MauroDiGirolamo/Xyndravandria_Averazain
PHP
Averazain is an Ajax framework supporting also JavaScript disabled clients perfectly - including search engines like Google.
Xyndravandria Dyverath
http://github.com/MauroDiGirolamo/Xyndravandria_Dyverath
PHP
Dyverath is a database access wrapper.
Xyndravandria Erozaver
http://github.com/MauroDiGirolamo/Xyndravandria_Erozaver
PHP
Erozaver is a class extending the type hinting given by the PHP engine (additional support for basic type hinting and size constraints).
Xyndravandria Mondraviel
http://github.com/MauroDiGirolamo/Xyndravandria_Mondraviel
PHP
Mondraviel is a class used to separate HTML from PHP code by firstly register models - files containing place holders embedded in HTML code - and then later fill them dynamically with content by passing values for the place holders.
*/
namespace Xyndravandria\Dyverath;
use Xyndravandria\Dyverath\Cache;
use Xyndravandria\Dyverath\Cacheable;
use Xyndravandria\Dyverath\RepresentingClass;
/// Baseclass of Server, Database and Table.
/// @abstract
abstract class ExtendedRepresentingClass extends RepresentingClass implements Cacheable {
/// The Cache holding instances of @ref
/// ExtendedRepresentingClass
/// "ExtendedRepresentingClasses".
private static $Cache;
/// Whether the Cache of this class is enabled. @n
/// If the Cache is turned on, any instance of the
/// class will be inserted into the Cache and if used
/// again, taken from the Cache instead of instancing
/// another object.
const CacheEnabled = 1;
/// The @ref ExtendedRepresentingClass
/// "ExtendedRepresentingClass's" name.
/// <dl class = "type"><dt><b>%Type:</b></dt>
/// <dd>string</dd></dl>
/// @protected
protected $Name = null;
/// Returns ExtendedRepresentingClass::$Name.
/// @public
/// @returns string
public function Name( ) {
return $this->Name;
}
/// Creates a new ExtendedRepresentingClass.
/// @public
/// @param string $Name: The @ref
/// ExtendedRepresentingClass
/// "ExtendedRepresentingClass's"
/// name.
public function __construct( $Name ) {
//\settype( $Name, 'string' );
$this->Name = $Name;
return;
}
/// Returns the default configuration of this
/// ExtendedRepresentingClass.
/// @private
/// @static
/// @returns integer
/// @note Overrode
/// RepresentingClass::DefaultConfiguration( ).
public static function DefaultConfiguration( ) {
return self::CacheEnabled;
}
/// Instances of @ref ExtendedRepresentingClass
/// "ExtendedRepresentingClasss" selected by
/// ExtendedRepresentingClass::Select( ) to be later
/// used in ExtendedRepresentingClass::__callStatic. @n
/// <dl class = "type"><dt><b>%Type:</b></dt>
/// <dd>array of ExtendedRepresentingClass</dd></dl>
/// @private
/// @static
private static $Instance = array( );
/// Returns the instance of an
/// ExtendedRepresentingClass selected or directly
/// calls a method of the instance.
/// @public
/// @static
/// @param string $Method: The method to be called.
/// @param array $Argument: An optional array
/// containing arguments to be passed to the method.
/// @returns ExtendedRepresentingClass or mixed
/// @note Both $Method and $Argument are optional
/// parameters. @n
/// Having said that, @n
/// @verbatim Table::Instance( )->Method( 1, 'String' ) == Table::Instance( 'Method', array( 1, 'String' ) ) @endverbatim
public static function Instance( $Method = '', array $Argument = array( ) ) {
//\settype( $Method, 'string' );
if( ! isset( self::$Instance[ \basename( static::ClassName( ) ) ] ) )
throw new XyndravandriaDyverathException( 'Demanded instance of ExtendedRepresentingClass called "' . $ExtendedRepresentingClass . '" has not been selected yet.' );
else {
$Instance = self::$Instance[ \basename( static::ClassName( ) ) ];
if( $Method == '' )
return $Instance;
else {
$ReflectionMethod = new \ReflectionMethod( $Instance, $Method );
$RequiredParameters = $ReflectionMethod->getNumberOfRequiredParameters( );
if( $RequiredParameters > 0 && $RequiredParameters != \count( $Argument ) )
throw new XyndravandriaDyverathException( 'Argument mismatch: The number of arguments passed to ExtendedRepresentingClass::__callStatic( ) within $Argument[ 1 ] (' . \count( $Argument ) . ') does not match the number of required parameters of to be called method ' . $ExtendedRepresentingClass . '->' . $Method . '( ) (' . $RequiredParameters . ').' );
else
return \call_user_func_array( array( $Instance, $Method ), $Argument );
}
}
return;
}
/// Saves the instance of a class to be later used
/// again by calling
/// ExtendedRepresentingClass::Instance( ).
/// @public
/// @returns ExtendedRepresentingClass
public function SaveInstance( ) {
return self::$Instance[ \basename( static::ClassName( ) ) ] = $this;
}
/// Returns the @ref ExtendedRepresentingClass
/// "ExtendedRepresentingClass's" unique
/// identifier.
/// @public
/// @returns string
/// @note Required by the CacheAble interface.
public function UniqueIdentifier( ) {
return $this->Name;
}
/// Returns this @ref ExtendedRepresentingClass
/// "ExtendedRepresentingClass's" Cache.
/// @public
/// @static
/// @returns Cache
/// @note Required by the Cacheable interface.
public static function Cache( ) {
isset( self::$Cache[ static::ClassName( ) ] ) || self::$Cache[ static::ClassName( ) ] = new Cache( static::ClassName( ) );
return self::$Cache[ static::ClassName( ) ];
}
}
?>
|