Gleiche Klassennamen in verschieden Packages

Denniz

Erfahrenes Mitglied
Hi Leute,

welche möglichkeit in Php gibt es Klassennamenkollisionen zu vermeiden?
Mal angenommen ich habe diese Packages:
PHP:
require_once('fruechte/class.orange.php');
require_once('farben/class.orange.php');
->gibt Error
Klar ich könnte die datei-, bzw Klassennamen händisch umschreiben.
Bei über 100 klassen die per Autoload initialisiert werden sollen muß es doch aber eine andere Möglichkeit geben.
Namespaces gehen bei mir nicht da php version < 5.3

Weiß jemand wie man soetwas vermeiden kann?

Danke und Gruß
 
Hi,

um solche Kollisionen ohne Namespaces zu vermeiden, gehe ich so vor:

Der Klassenname besteht immer aus Ordner_(Unterordner_)Dateiname.
Das Autoload dazu sieht dann ungefähr so aus:
PHP:
			$classFile = str_replace('_', DIRECTORY_SEPARATOR, $className . '.class.php';
			if (is_readable($classFile)) {
				require_once $classFile;
			}

// irgendwo ausserhalb dann:
new Ordner_Unterordner_Klasse
// daraus wird dann im Autoloader
// Ordner\Unterordner\Klasse.class.php


Um das im Nachhinein zu ändern fällt mir allerdings keine andere Lösung ein als die Klassennamen umzubennen und den Autoloader anzupassen.
 
Hi,

ok das wäre eine Möglichkeit allerdings gibt es dann bei dieser Methode wieder das Problem wenn man eine Klasse in ein anderes Package verschieben muß.

Naja, hoffen wir mal das in PHP6 soetwas gehen wird: :)
PHP:
 $color:farben.Orange = new farben.Orange();
 $frucht:fruechte:Orange = new fruechte.Orange();
 
Wieso? Wenn du deinen Klassen immer nach dem selben Muster in Namespaces "verpackst", reicht ja PHP 5.3?!

Bsp.: du besitzt example.com -> Namespace: com\example\mygroup\myclass (so hats sich bei Java durchgesetzt).

Und so "ekliges" Zeugs :-) wie man aus Java zugut kennt: variable Klasse = new Klasse (also 2x Klasse angeben -.-) wird man bei PHP wohl nie finden.
 
Zurück