Klassen mehrfach definieren

Unicate

Erfahrenes Mitglied
Hallo!

Mein Problem ist folgendes:
Hauptordner
-name1
--classes
---class.irgendwas.php
-name2
--classes
---class.irgendwas.php
-name3
--classes
---class.irgendwas.php

in jeder class.irgendwas.php wird eine Klasse deklariert, welche in allen gleich heisst, aber verschieden ist.
ich möchte nun aus jeder klasse einige variablen laden.
Logischerweise bringt mir php den fehler, das man eine klasse nicht mehrfach deklarieren kann.

Meine Frage:
kann man eine klasse undeklarieren, sodass ich sie erneut deklarieren kann?
 
Dass es einen Weg gibt, gleichnamige Klassen mehrfach zu deklarieren, ist mir nicht bekannt.
Ich glaube auch nicht, dass PHP etwas ähnliches, wie Packages in Java, unterstützt (man möge mich eines besseren belehren).
Möglichkeiten, eine Klasse zur Laufzeit neu zu benennen, habe ich im Handbuch auch nicht gefunden.
Für gleichnamige Klassen sieht es also düster aus.
Du kannst Dir aber eine Logik überlegen, nach der Du die Klassen nennst, z.B. VerzeichnisnameDateiname oder VerzeichnisnameEinFesterText.
Dann kannst Du sie dynamisch erzeugen, sofern Dir diese Parameter, z.B. durch Auslesen der Unterverzeichnisse, bekannt sind.

Hier ein Beispiel:

aClass.class.php
PHP:
<?
class aClass {
    var $aValue=null;
    
    function aClass($v) {
        $this->aValue=$v;
    }
    
    function output() {
        echo $this->aValue."<br>\n";
    }
}
?>

anotherClass.class.php
PHP:
<?
class anotherClass {
    var $anotherValue=null;

    function anotherClass($v) {
        $this->anotherValue=$v;
    }

    function output() {
        echo $this->anotherValue."<br>\n";
    }
}
?>

classes.test.php
PHP:
<?
    include_once "aClass.class.php";
    include_once "anotherClass.class.php";
    
    $c="aClass";
    
    $c1=new $c ("Value in a Class");

    $c="anotherClass";
    
    $c2=new $c ("Value in another Class");
    
    $c1->output();
    
    $c2->output();

    /* Ausgabe:
     *   Value in a Class
     *   Value in another Class
     */
?>
Den Inhalt von $c kannst Du entsprechend aus dem Pfad oder sonstigen Merkmalen zusammenbauen, so dass am Ende der Klassenname dasteht.

Gruß hpvw
 
Ich würde es ganz anders machen als hpvw. Nehmen wir an du hast ein Modulsystem, wo eine Klasse das Modul repräsentiert. Nun liegt wegen der Übersichtlichkeit die Module in einem anderen Ordner. Da du nun nicht weißt, wie die Klassen heissen und du nicht gerade wenige Module hast und es vielleicht Module zu verschiedenen Kategorien geben soll, aber alle irgendwie in immer der gleichen Datei sind führst du einen Prefix ein.

Danach machste eben durch eine Schleife alle includes für die Dateien und nun kannste die Klassen mit den benötigten Variablen so checken:

PHP:
<?php
//die ganzen requires und includes natürlich davor machen

define("MODULE_PREFIX", "mod_class_");
$array = get_declared_classes();

foreach($array as $value) {
	if(stripos($value, MODULE_PREFIX) !== false)
		$newobj = new $value();
		//hier kannste ja noch mehr mit dem neuen objekt anstellen :)
}
?>
 
Zuletzt bearbeitet:
Ok, sorry das ich mich solang nicht wegen diesem Thema gemeldet habe, aber ich hatte noch andere sachen zu tun.


Die Lösungen bisher waren nicht die Antworten, nach denen ich gesucht habe.

Mein Problem ist, das ich mehrere verschiedene Klassen habe, eine dieser Klassen ist schon deklariert, diese aber gleich heissen.
Ich kann sie auch nicht umbenennen.
 
Zurück