PHP Operatoren überschreiben?

mercsen

Lt. Commander
Registriert
Apr. 2010
Beiträge
1.677
Moin,

ich habe diesesmal nur eine kurze frage. Ich hab es damals in C++ geliebt das ich das Verhalten von Objekten und operatoren nahezu beliebig festlegen konnte. Meine frage ist jetzt ob es (meinetwegen auch über eine extension) so eine erweiterung für PHP gibt.

z.b, reichen mir bei funktionen nicht aus nur einen bool oder einen string zurückzugeben. also habe ich eine klasse BoolString geschrieben die dann einen array mit dem bool wert und dem string zurückgibt. Um dann zu testen ob der bool wert true oder false ist muss ich diesen immer erst mal aus dem array auslesen.

z.b.
Code:
$test = mache_was_tolles();
// jetzt ist $test = array { 0=> true, 1=> 'Ein string'}
// abfrage auf bool nur wie folgt möglich:
if($test[0]) {
  do_some_stuff();
}

// oder
if($test->getBool()) {
  do_some_more_stuff();
}

// am liebsten hätte ich es aber so:
if($test) {
  do_much_more_stuff();
}

//könnte natürlich auch eine funtion schreiben die mir das if konstrukt ersetzt.
//z.b.

eval_boolstring($test, "funktion_true", "function_false");
// also mit callbacks arbeiten.

// alternative:
if(eval_boolString($test)) {
   do_stuff();
}

ist mir aber alles zu viel geschreibe und mit den callbacks wirds zudem zu unübersichtlich.
Ist euch dort etwas geläufig?

Wie gesagt, es darf auch gerne ein exrra modul sein, handelt sich um einen root server, da könnte ich php auch selber compilieren.

genauso gerne würde ich gerne neue operatoren einführen und z.b. 2 objekte addieren, aber eben nach einem von mir festgelegtem verhalten.

Wenn es soetwas nicht gibt, weiß jemand ob da was geplant ist?
 
Geht, aber du musst Objekte verwenden.
 
Die einzige Operatorüberladung in PHP gibt es für Artay-Operationen (SplArrayAccess), alles andere ist in PHP nicht möglich.
 
Enigma schrieb:
Geht, aber du musst Objekte verwenden.


habe doch gesagt das ich objekte verwende ?

$test ist nicht wirklich ein Array, sondern ei objekt der Klasse BoolString. Und wie bitte bekomme ich dieses nun dazu, das wenn es in einer if-abfrage auftaucht nach meinen regeln evaluiert wird? Außer - wie oben bereits geschrieben und als unschö empfunden - über exterene funktionen die quasi ein if simulieren?

php hat so viele "magic functions" womit man klassen zur laufzeit definieren / laden kann und sogar zur ausführung klassen und objekte u attribute erweitern kann, aber operatoren überladung unterstützt es nicht :(
 
Mercsen schrieb:
$test ist nicht wirklich ein Array, sondern ei objekt der Klasse BoolString. Und wie bitte bekomme ich dieses nun dazu, das wenn es in einer if-abfrage auftaucht nach meinen regeln evaluiert wird? Außer - wie oben bereits geschrieben und als unschö empfunden - über exterene funktionen die quasi ein if simulieren?

Gar nicht. Die Semantik von "if ($objekt)" ist festgelegt und kann nicht vom Programmierer beeinflusst werden. Deine beste Möglichkeit ist, der Klasse BoolString eine Methode zu geben, die dir den Bool-Teil zurückgibt, dann könntest du etwas schreiben wie "if ($objekt->isTrue())".
 
ja soweit ist mir das klar und das würde ich halt gerne geändert haben ;)

Naja ich habe mich ziwschenzeitlich ja auch umgeschaut. Da ich eh schon so einige manipulationen an php und apache vorgenommen habe und mein tool so kaum auf nem standart server läuft kann ich php auch gleich um nen neues if erweitern :p

das datei handling muss ich auch mal anpassen, eine qual wie das includen bei php gelöst ist!

p.s. das natürlich nur so dahin gesagt. nun muss ich halt nen weg finden in allen php datein bestimmte befehle einzubinden. z.b. das automatisch alle php datein eine datei mit funktionen einbinde, wie ein header. ideen? Außer das per hand zu machen....
 
Zuletzt bearbeitet:
Mercsen schrieb:
ja soweit ist mir das klar und das würde ich halt gerne geändert haben ;)
Es ist aber unmöglich! PHP kennt keine Operatorüberladung.

Mercsen schrieb:
das datei handling muss ich auch mal anpassen, eine qual wie das includen bei php gelöst ist!
Halte dich an den PSR-0 Dateinamenstandard und du kannst Autoloading nutzen und musst nie wieder manuell eine PHP Datei includen.

Mercsen schrieb:
z.b. das automatisch alle php datein eine datei mit funktionen einbinde, wie ein header. ideen? Außer das per hand zu machen....
php_value auto_prepend_file
Was anderes existiert nicht, aber das ist ein alter Hack aus PHP3/PHP4 Zeiten, heute absolut unnötig. Bau nen ordentliches Bootstrapping deiner Anwendung, nutz Autoloading und diese "Probleme" verschwinden automatisch.
 
Zurück
Oben