phpbar.de logo

Mailinglisten-Archive

[php] Denksportaufgabe

[php] Denksportaufgabe

Rainer Krauss php_(at)_phpcenter.de
Wed, 18 Apr 2001 19:46:48 +0200


----- Original Message -----
From: "Marcel Beerta" <marcel_(at)_beerta.de>
To: "PHP ML" <php_(at)_phpcenter.de>
Sent: Wednesday, April 18, 2001 3:58 PM
Subject: [php] Denksportaufgabe


> Beispiele:
>
> /msg {user} nachricht  - sollte eine private nachricht an einen benutzer
> schreiben
> ich will _coden_   - sollte das wort coden fett darstellen
> /who    - liest alle aktiven user aus der datenbank aus, etc.
>
> wie könnte ich es generell schaffen, solche dinge in einen eigenen
> kleinen befehlssatz zu bekommen?
> Momentan mache ich alles mit Regulären ausdrücken, dieses bewirkt aber,
> dass die dateien mit den kommandos gänzlich unübersichtlich werden. Wenn
> jemand von euch ein Lösungsbeispiel hätte, wäre es sehr positiv ;)

Das ist schon was aufwaendiger, aber grundsaetzlich mal ein paar tipps:

Im prinzip alles ueber preg loesen (blos nicht ereg, das ist buggy und
vor allem viel langsamer(!))

/<kommando> [<parameter1>] [<text>]

Imho ist es am einfachsten per default auf einen parameter zu parsen,
duerfte wohl bei irc-maessigem chat der regelfall sein.

Ums schneller zu bekommen, erstmal pruefen ob die zeile mit "/"
anfaengt und nur dann auf kommando per preg parsen.

Ich wuerde so vorgehen, dass ich <kommando> <parameter> <text> per
preg parse und dann ein aufruf in der art mache:

$fun = "command_".$kommando;
if (function_exists ($fun)) {
  $fun($komplette_eingabe,$parameter1,$rest)
}

Das macht die kommandos sehr leicht und uebersichtlich, da du dann
fuer jedes kommando einfach eine funktion schreiben kannst und
dich sonst um nichts mehr kuemmern musst, z.B.:

function command_msg($dummy, $empfaenger, $text) {
  an $empfaenger $text senden...
}

function command_me($text, $dummy, $dummy) {
  an den channel "$usernick ".$text senden...
}

Du musst natuerlich darauf achten das es keine funktion
command_irgendwas gibt, mit der man unsinn treiben koennte, aber
das erklaert sich wohl von selbst.

Bei "_fett_" wirst du um das einzelne preg nicht herum kommen,
pack diese fiesen dinger in eine funktion und die die eingabe
uebernimmt und ein html-string zurueck gibt - dann wirds
halbwegs ordentlich.
Das wuerde ich aber nur bei der eingabe parsen, und dann bereits
den <b>fett</b> uebergeben, damit du das nicht fuer jeden client
einzeln machen musst.

Wenn du dann noch darauf achtest das require gaaaanz gaaaanz bah! ist
und include ebenso vermeidest solltest du keine grossen performance
probleme haben.
(Wobei ich ausdruecklich darauf hinweise, dass ich zu require/include
eine recht eigene/extreme meinung habe, die hier wohl kaum ein
"experte" mit mir teilen duerfte)

hope it helps...




_________________________________________________________
Do You Yahoo!?
Get your free _(at)_yahoo.com address at http://mail.yahoo.com



php::bar PHP Wiki   -   Listenarchive