method_exists() auf Kindklasse anwenden

S

spex

Hi,

ich habe 2 Klassen die folgendermasßen aufgebaut sind:

PHP:
// //////////////////////////////
// ggf. Erweiterungen laden
if(file_exists('class_template_function.php'))
    require_once('class_template_function.php');
else {
    class TEMPLATE_FUNCTION{};
}

// //////////////////////////////
// Template Klasse
class TEMPLATE extends TEMPLATE_FUNCTION
{
  //...

function release() {
   
  // Hier soll er prüfen ob in der Klasse "TEMPLATE_FUNCTION" eine Methode mit namen release() existiert. Wenn das zutrifft, dann: TEMPLATE_FUNCTION::release(); aufrufen!

}
}
Das Problem ist nun das method_exists() ein Objekt erwartet was hier im Regelfall "$this" sein sollte.
Da die Funktionen aber den gleichen Namen tragen, ist das nicht machbar.

Jemand eine Idee?

2. Frage:

PHP:
if(file_exists('class_template_function.php'))
    require_once('class_template_function.php');
else {
    class TEMPLATE_FUNCTION{};
}
Das kommt mir nicht sehr sauber vor. Gibts da andere Möglichkeiten?

Gruß sp3x
 
Die leere Klasse wird nur erstellt und dann für die Vererbung genutzt, wenn Datei mit der entsprechenden "gefüllten" Templatefunction Klasse nicht existiert.

Zum prüfen, ob in der "Parent" Klasse die Methode zur verfügung steht, müsste ungefäht sowas funktionieren (das IF Konstrukt und parent::test() fehlt hier):
PHP:
class emptyClass {};
class hasMethod {
    function test() {
        echo "nothing";
    }
}

class kind1 extends emptyClass {
    function test() {
        var_dump(method_exists(get_parent_class(), 'test'));
    }
}

class kind2 extends hasMethod {
    function test() {
        var_dump(method_exists(get_parent_class(), 'test'));
    }
}

$x1 = new kind1();
$x1->test();


$x2 = new kind2();
$x2->test();

Ausgabe:
PHP:
bool(false)
bool(true)

Wie man das ganze sauber umsetzen kann, kann ich nicht beantworten.
Entweder es gibt eine Klasse oder sie gibt es nicht. Dieses "wenn vorhanden, dann vererben" Konstrukt ist in meinen Augen schon ein Fehler in der Logik des Scripts.
 
Wie man das ganze sauber umsetzen kann, kann ich nicht beantworten.
Entweder es gibt eine Klasse oder sie gibt es nicht. Dieses "wenn vorhanden, dann vererben" Konstrukt ist in meinen Augen schon ein Fehler in der Logik des Scripts.
Wo ist da der Logikfehler?
Es besteht die Möglichkeit die Klasse zu erweitern und das in einer entsprechend vorgegebenen Datei.
Wenn die Datei existiert, dann wird die Klasse erweitert, wennicht, dann nicht.
Wozu sollte ich jetzt eine leere, zusätzliche Datei auf dem Server liegen haben wenn diese keinen Zweck erfüllt?

PHP müsste diese Datei unnötigerweise einlesen und auf der HDD währen jenachdem wie formatiert wurde, 4Bytes flöten 8D.

Gruss
 
Zurück