Login   Register  
PHP Classes
elePHPant
Icontem

File: VirtualInterface.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Oliver Anan  >  Virtual interface generator  >  VirtualInterface.php  >  Download  
File: VirtualInterface.php
Role: Class source
Content type: text/plain
Description: source code of the VirtualInterface class
Class: Virtual interface generator
Generate empty interfaces definitions
Author: By
Last change:
Date: 3 years ago
Size: 2,397 bytes
 

Contents

Class file image Download
<?php
/** 
 * @author oliver anan <oliver@ananit.de> 
 * @version 1.0 
 * @copyright oliver anan 
 * @license LGPL 3 http://www.gnu.org/licenses/lgpl.html 
 * Service provider for creating empty interfaces at runtime.
 * If an class implements an interface that is not bundled with the class
 * this class can be used to prevent an 'interface not found' error. 
 */ 
abstract class VirtualInterface{
    
    
/**
     * @author oliver anan <oliver@ananit.de>
     * @version 1.0
     * @since 1.0
     * @var string[]
     * A list of all generated interfaces.
     */
    
protected static $virtualized = array();
    
    
/**
     * @author oliver anan <oliver@ananit.de>
     * @version 1.0
     * @since 1.0
     * @param $interface The name of the interface including the namespace without a leading '\'.
     * @param $autoload Indicates if the method should attemp to autoload the interface. Default is true.
     * @return boolean true if the method creates the interface, false if the interface can be autoloaded. 
     * @example VirtualInterface::add('MyNamespace\foo'); class bar implements MyNamespace\foo{...} 
     * loads MyNamespace\foo if it is available. If it can not be loaded a empty interface 'foo' will be generated
     * in the namespace 'myNamespace'
     */
    
public static function add($interface,$autoload=true){
        if(! 
interface_exists($interface,$autoload)){
            
//seperate interface name and namespace
            
$parts explode('\\',$interface);
            
$interfaceName array_pop($parts);
            
$namespace implode('\\',$parts);
            
//generate source code
            
$code '';
            if(
$namespace$code .= "namespace $namespace;";
            
$code .= " interface $interfaceName {}";
            
//create interface
            
echo $code;
            eval(
$code);
            
self::$virtualized[] = $interface;
            return 
true;
        }
        else return 
false;
    }
    
    
/**
     * @author oliver anan <oliver@ananit.de>
     * @version 1.0
     * @since 1.0
     * @param $interface the name of the interface including the namespace without a leading '\'.
     * @return boolean true if the interface is virtual.
     */
    
public static function isVirtual($interface){
        return (
array_search($interfaceself::$virtualized)!==false);
    }
    
    
/**
     * @author oliver anan <oliver@ananit.de>
     * @version 1.0
     * @since 1.0
     * @return string[] A list of all generated interfaces.
     */
    
public static function getVirtualized(){
        return 
self::$virtualized;
    }
}