Wo jetzt erstmal wieder alles läuft und zusätzlich noch die
mysql- und templatte-klassen fertig sind (und hoffentlich auch alles läuft)
und bevor ich mich ans Rechte und Benutzer-System wende,
wollte ich mal wieder etwas fragen:
Und zwar hab ich von vielen Klassen deren Namen direkt für die Anbindung an die
DB genutzt.
Leider kann man ja nicht von einer Klasse den Namen auslesen.
Der PHP-Parser hat was dagegen, wenn man den Klassennamen direkt als "String" verwenden will, aber diesen nicht schon als String in den Quelltext reinschreibt.
PHP-Quellcode:
class MeineKlasse {
}
echo MeineKlasse;
if (is_subclass_of($obj, MeineKlasse)) ...
Hier meckert er jedenfalls rum.
Zitat:
Notice: Use of undefined constant MeineKlasse - assumed 'MeineKlasse' in ... on line 6
Notice: Use of undefined constant MeineKlasse - assumed 'MeineKlasse' in ... on line 7
Und nein, den Namen als String will ich nicht angeben, denn da fallen Verschreiber nicht immer gleich auf.
Wenn man den Klassennamen nutzen würde, dann könnte eine Meldung ala "unbekannte Klasse" erzeugt werden.
nun war ich erstmal auf diese saublöde Idee (und verwende sie schon eine kleine Weile)
PHP-Quellcode:
class test {
static function Name()
{
return get_called_class();
}
}
echo test::Name();
leider finde ich das etwas umständlich,
aber immerhin kommt bei einem Verschreiber etwas wie "... besitzt diese Methode nicht"
Nun bin ich vor ein paar Minuten auf diese noch krankere Idee gekommen, hab's ausprobiert und erschreckender Weise scheint es zu funktionieren.
(also, es geht um die Konstante ... das __toString ist nur bei dem Test mit drin)
PHP-Quellcode:
class test {
function __toString()
{
return get_called_class();
}
}
define('test', 'test');
$test = new test;
if ($test instanceof test) echo 'yes';
echo test;
echo $test;
Wie gesagt, in diesem kleinen Test funktioniert es, auch wenn ich nicht verstehe, wie PHP nun zwischen der Konstannte und der Klasse unterscheidet.
Spricht jetzt irgendwas gegen dieses Vorgehen?
(natürlich würde ich mir diese Konstanten automatisch generieren lassen, um da ebenfalls Verscheiber zu unterbinden)