PHP Alias Class Loader (Yomm Part 2)
Was machen wenn eine neue und frische Struktur alte PHP Klassen nicht mehr kennt? Der "Alias Class Loader" enthält die alten Namen und verweist auf die Neuen.
Das Prinzip ist einfach, man hat neue Strukturen oder neue Namenskonventionen inerhalb der Klassen, und möchte aber das Files mit alten Klassen Aufrufen nicht in einem Fehler enden. Genau diese Problem soll der "Alias Class Loader" beheben in Verbindung eines Autoloaders (Siehe Yomm Part 1).
1. Schauen ob die Class Existiert (gemäss Pearl Namens Konvention) oder ob eben der Allias Loader in kraft tritt:
function YommAutoLoader($class)
{
$file = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php');
if(!file_exists($file)){
// das file gibt es nicht; Der Alias Class Loader kommt zum einsatz.
new Yomm_Alias($class);
} else {
require_once($file);
}
}
spl_autoload_register("YommAutoLoader");
// mein test code:
$obj = new ExistiertNichtClass();
Die Klasse "ExistiertNichtClass" hat nicht die Namens Konvention "Yomm_Ordner_Name()..." sondern kommt zbsp. von einem alten System, soll aber trotzdem erkannt werden falls diese in älteren Files benutzt wird. Die Klasse wurde also in der neuen Hyrachie mit dem neuen Namen: Yomm_Existiert() angelegt. (Im Ordner Yomm mit dem Namen Existiert.php).
2. Der Yomm_Alias Klassen Eintrag und das Loading:
Class Yomm_Alias {
/**
* table of available alias names
* @var $_alias_table [array] old name(alias name) => real name in the library
*/
private $_alias_table = array(
"ExistiertNichtClass" => "Yomm_Existiert",
"AlterClassName" => "Yomm_Ordner_NeuerNameUndStruktur",
);
public function __construct($original_class) {
if(!array_key_exists($original_class, $this->_alias_table)) {
throw new Yomm_Error("There is no Alias name available for Original class {$original_class}. class not Found!");
return null;
}
new $this->_alias_table[$original_class]();
if(!class_alias($this->_alias_table[$original_class], $original_class)) {
throw new Yomm_Error("Error while generating the class alias for {$original_class}");
return null;
}
}
}
/* old php version fix for class_alias; dirty */
if(!function_exists('class_alias'))
{
function class_alias($original, $alias)
{
eval('abstract class ' . $alias . ' extends ' . $original . ' {}');
}
}
Mit dieser einfachen Yomm_Alias() Klasse enden nicht mehr verwendete Klassen (zbsp. Klassen mit Abstraktionen welchen von anderen MItarbeitern erstellt werden.) nicht in einem Error, sondern laufen ohne Probleme weiter (Natürlich soll die alte Klasse in der Dokumentation als Deprecated vermerkt werden!). In meinem Fall griff ich zu dieser Methode weil jeder Controller auf eine extended class zugegriffen hat welche durch die neue Namens Konvention umbennent wurde. Mit der Yomm_Alias() Klasse ist diese abwärts kompatibelität gegenüber der alten Namens Konvention gegeben.
Letzte Beitrag änderung am 23.03.2011 um 15:19 Uhr
Fragen zum Script, einen Fehler melden oder eine wichtige ergänzung mitteilen? Kontaktieren Sie uns einfach.






Hochwertige, handgemachte Produkte für den Tisch und die Küche
PHP Lab - Gratis und Hilfreich für Jedermann!