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($interface, self::$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;
    }
}